#asp.net-mvc #entity-framework #automapper
#asp.net-mvc #entity-framework #automapper
Вопрос:
Я подозреваю, что есть какая-то простая конфигурация с AutoMapper для получения желаемого сопоставления, но я понятия не имею. Кто-нибудь может указать мне правильное направление?
Вот моя ситуация:
Я определил наследование таблицы для каждого типа в Entity Framework с супертипом публикации и подтипом статьи ( 5 других подтипов)
ArticleAdmin — это моя viewmodel (MVC), которая наследуется от viewmodel администратора публикации.
Сопоставление viewmodel с подтипом домена работает нормально:
Mapper.CreateMap<ArticleAdmin, Article>();
var _Article = Mapper.Map<ArticleAdmin, Article>(article);;
И поэтому у меня нет проблем с добавлением статей.
Но пойти другим путем не кажется таким уж простым. Это не приведет к заполнению полей подтипа:
Mapper.CreateMap<Article, ArticleAdmin>();
var _Article = Mapper.Map<Article, ArticleAdmin>(_article_entity);
Обновить
Я пересмотрел это, поскольку часть проблемы заключалась в том, что мой универсальный репозиторий возвращал сущность супертипа вместо подтипа . Теперь сопоставление домена с viewmodel компилируется, но оно по-прежнему сопоставляет значения null с полями подтипа, при этом корректно сопоставляя поля супертипа.
Ответ №1:
Боюсь, у меня недостаточно репутации для комментариев, чтобы запрашивать то, что вы ввели, поэтому простите меня, если это не соответствует действительности.
Соответствуют ли классы, которые вы пытаетесь сопоставить, одной и той же спецификации?
Если нет, то вам может потребоваться выполнить некоторую настройку в вашей CreateMap. Вы можете использовать ForMember для настройки источника и назначения каждого свойства.
Mapper.CreateMap<Article, ArticleAdmin>()
.ForMember(dest => dest.DestProperty, opt => opt.MapFrom(src => src.SourceProperty))
Если это не так, то, возможно, вы могли бы опубликовать спецификацию класса, который вы хотите опубликовать из> в.
Комментарии:
1. Да, была проблема со спецификациями класса, которую я исправил. Спасибо.