Я явно загружаю отношения в свой 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. Если у вас есть большой опыт в этом, поделитесь своими мыслями.