Платформа объекта + AutoMapper (Объект к DTO и DTO к объекту)

Лучше поместить переменные конфигурации в файл конфигурации.

В вашем случае я бы предложил поместить ваши переменные в config / mail.php , например

'imap_hostname' => env('IMAP_HOSTNAME_TEST', 'imap.gmail.com')

, и обратиться к ним по

config('mail.imap_hostname')

Сначала он пытается получить значение переменной конфигурации в файле .env и, если ему не удалось найти значение переменной в файле .env , он получит значение переменной из config / mail.php

20
задан Daniel Schilling 9 November 2011 в 23:56
поделиться

4 ответа

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);
    }
}

Он довольно загадочный, всегда воссоздает сопоставления, но это сработало. Надеюсь, это как-то поможет. :)

4
ответ дан 30 November 2019 в 00:01
поделиться

AutoMapper очень выразителен, когда он доходит до ошибки отображения. внимательно прочтите сообщение об исключении.

Еще одна важная вещь - не забыть вызвать Mapper.AssertConfigurationIsValid (); после создания сопоставлений. он выдает ошибку, если отображение неверно, что предотвращает исключение позже во время выполнения приложения.

2
ответ дан 30 November 2019 в 00:01
поделиться

Проблема в том, что 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

5
ответ дан 30 November 2019 в 00:01
поделиться

Проблема, с которой я столкнулся, связана с обновлением ссылок на EntityCollection. AutoMapper создает новый экземпляр отношения при маппинге из DTO в Entity, и это не устраивает EF.

Что решило мою проблему, так это настройка AutoMapper на использование целевого значения для моих свойств EntityCollection. В вашем случае:

Mapper.CreateMap< CustomerDTO , Customers >().ForMember(c => c.Orders, o => o.UseDestinationValue());

Таким образом, AM не будет создавать новый экземпляр EntityCollection, а будет использовать тот, который пришел с исходной сущностью Customer.

Я все еще работаю над тем, как это автоматизировать, но пока это решает мою проблему.

18
ответ дан 30 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: