Я попытался воспроизвести ваш сценарий, и в результате я получил AutoMapperConfigurationException
, сообщив, что несопоставленные члены найдены для свойства GroupIds
ArticleFormView
. Таким образом, я также написал карту из домена:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Article, ArticleFormView>()
.ForMember(articleFormView => articleFormView.GroupIds, opts =>
opts.MapFrom(article => article.ArticleGroups.Select(articleGroup => articleGroup.GroupId)));
cfg.CreateMap<ArticleFormView, Article>()
.ForMember(article => article.ArticleGroups, opts =>
opts.MapFrom(articleFormView => articleFormView.GroupIds.Select(id => new ArticleGroup
{
// Uncomment these two lines if you need them.
//Article = new Article { Title = articleFormView.Title, ArticleId = articleFormView.ArticleId },
//Group = new Group { GroupId = id },
ArticleId = articleFormView.ArticleId,
GroupId = id,
})));
});
Имейте в виду, что, отображая сущность из статьи в представление формы, вы безвозвратно теряете данные. С предоставленной вам структурой представления формы есть ограничения относительно того, какие элементы вы можете заполнять при обращении к процессу отображения, просто потому, что у вас меньше данных для начала. Например, сохраняя только идентификаторы групп, вы теряете имена групп, поэтому при обратном отображении вы не будете знать имя группы.
ReverseMap()
не сработало, потому что AutoMapper не будет автоматически знать, как обрабатывать две разные коллекции разных типов и имен:
Article
: коллекция ArticleGroup
, называемая "ArticleGroups"
ArticleFormView
: список int
, называемый "GroupIds"