Автоматизатор с наследованием Entity Framework

#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. Да, была проблема со спецификациями класса, которую я исправил. Спасибо.