AutoMapper и Entity Framework POCO с явной загрузкой - PullRequest
2 голосов
/ 04 августа 2011

Я явно загружаю отношения в свой POCO, когда мне это нужно, но так как я переключился на AutoMapper, я подумал, что мог бы поручить ему предварительно загружать отношения для меня, чтобы мой код на уровне сервиса выглядел чище:

Mapper.CreateMap<Issue, IssueEditModel>().BeforeMap((i, m) => 
        LoadProperties<Issue>(() => 
            { return kernel.GetService<IIssuesRepository>(); },
            i, new Expression<Func<Issue, object>>[]
            {
                e => e.RelationshipA,
                e => e.RelationshipB
            }
        )
);

Метод LoadProperties ищет репозиторий с помощью DependencyResolver и загружает перечисленные отношения с помощью метода LoadProperty ObjectContext. Теперь мои сервисы могут легко сопоставить EF POCO для просмотра модели одним вызовом Mapper.Map.

Кто-нибудь пробовал это раньше? Каковы потенциальные подводные камни? Имеет ли смысл хранить все эти вызовы LoadProperty в слоях службы / хранилища и максимально упрощать сопоставления AutoMapper?

Что меня беспокоит, так это то, что вы можете заставить AutoMapper выполнять утомительную работу за вас, например, преобразовывать типы и искать объекты по идентификаторам при преобразовании из модели представления в POCO, но в то же время это перемещает эту «логику» из вашего сервис / хранилище для конфигурации AutoMapper. Если у вас есть большой опыт в этом, поделитесь своими мыслями.

1 Ответ

0 голосов
/ 04 августа 2011

Я читал больше о доменном дизайне и ответственности за слои в вашем веб-приложении, и теперь я понимаю, что злоупотреблял AutoMapper.То, что я могу сделать это, не значит, что я должен.Одна из ловушек - тестирование.Поскольку мои вызовы AutoMapper заканчиваются попаданием в базу данных для разрешения некоторых взаимосвязей, я не могу использовать эти сопоставления для модульного тестирования, поэтому мне нужно создать другой набор сопоставлений только для моего теста.необходимые отношения.Люди предлагают, чтобы методы принимали флаги, которые контролируют, должны ли определенные отношения загружаться с помощью Include.В моем случае я думаю, что всегда буду загружать отношения многие-к-одному, когда сущность находится на стороне многих, и все связи при извлечении одной сущности (например, для подробного просмотра).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...