Лучше поместить переменные конфигурации в файл конфигурации.
В вашем случае я бы предложил поместить ваши переменные в config / mail.php , например
'imap_hostname' => env('IMAP_HOSTNAME_TEST', 'imap.gmail.com')
, и обратиться к ним по
config('mail.imap_hostname')
Сначала он пытается получить значение переменной конфигурации в файле .env и, если ему не удалось найти значение переменной в файле .env , он получит значение переменной из config / mail.php
I ' я не уверен, в чем ваша проблема, но - когда я хотел использовать LINQToEntities (переключился на NHibernate),
мне удалось успешно использовать автомаппер.
Взгляните на код:
public class SimpleMapper<TFrom, TTo>
{
public static TTo Map(TFrom fromModel)
{
Mapper.CreateMap<TFrom, TTo>();
return Mapper.Map<TFrom, TTo>(fromModel);
}
public static IList<TTo> MapList(IList<TFrom> fromModel)
{
Mapper.CreateMap<TFrom, TTo>();
return Mapper.Map<IList<TFrom>, IList<TTo>>(fromModel);
}
}
public class RepositoryBase<TModel, TLINQModel>
{
public IList<TModel> Map<TCustom>(IList<TCustom> model)
{
return SimpleMapper<TCustom, TModel>.MapList(model);
}
public TModel Map(TLINQModel model)
{
return SimpleMapper<TLINQModel, TModel>.Map(model);
}
public TLINQModel Map(TModel model)
{
return SimpleMapper<TModel, TLINQModel>.Map(model);
}
public IList<TModel> Map(IList<TLINQModel> model)
{
return SimpleMapper<TLINQModel, TModel>.MapList(model);
}
public IList<TLINQModel> Map(IList<TModel> model)
{
return SimpleMapper<TModel, TLINQModel>.MapList(model);
}
}
Он довольно загадочный, всегда воссоздает сопоставления, но это сработало. Надеюсь, это как-то поможет. :)
AutoMapper очень выразителен, когда он доходит до ошибки отображения. внимательно прочтите сообщение об исключении.
Еще одна важная вещь - не забыть вызвать Mapper.AssertConfigurationIsValid (); после создания сопоставлений. он выдает ошибку, если отображение неверно, что предотвращает исключение позже во время выполнения приложения.
Проблема в том, что Automapper теряет EntityKey, связанный с записью. Поскольку EntityFramework по умолчанию не обрабатывает POCO (обычный старый объект CLR)
, Джей Циммерман приводит здесь хороший пример того, как с этим справиться. gd / 4NIcj Также у Ярослава Ковальского (я полагаю, что он входит в команду EF) есть этот пример использования POCO в EF, который может хорошо переводиться для использования с Automapper (у меня еще не было возможности его попробовать): http: / /blogs.msdn.com/jkowalski/archive/2008/09/09/persistence-ignorance-poco-adapter-for-entity-framework-v1.aspx
Проблема, с которой я столкнулся, связана с обновлением ссылок на EntityCollection. AutoMapper создает новый экземпляр отношения при маппинге из DTO в Entity, и это не устраивает EF.
Что решило мою проблему, так это настройка AutoMapper на использование целевого значения для моих свойств EntityCollection. В вашем случае:
Mapper.CreateMap< CustomerDTO , Customers >().ForMember(c => c.Orders, o => o.UseDestinationValue());
Таким образом, AM не будет создавать новый экземпляр EntityCollection, а будет использовать тот, который пришел с исходной сущностью Customer.
Я все еще работаю над тем, как это автоматизировать, но пока это решает мою проблему.