2017-01-28 3 views
0

У меня есть Entity:Automapper 5,2 с наследования не работает

public abstract class BaseEntity 
{ 
    public Int16 Id { get; set; } 
    public DateTime Timestamp { get; set; } 
} 

public class Certificate : BaseEntity 
{ 
    public String Name { get; set; } 
    public String Authority { get; set; } 
    public DateTime RecieveDate { get; set; } 
    public String Image { get; set; } 
} 

И у меня есть ViewModel:

public abstract class BaseViewModel 
{ 
    public Int16 Id { get; set; } 
    public DateTime Timestamp { get; set; } 
} 

public class Certificate : BaseViewModel 
{ 
    public String Name { get; set; } 
    public String Authority { get; set; } 
    public DateTime RecieveDate { get; set; } 
    public String Image { get; set; } 
} 

Мне нужно отобразить Entity.Certificate к ViewModel.Certificate (я не действительно нужно сопоставить BaseEntity вообще, я хочу избавиться от него). У меня есть Mapper профиль:

public class MappingProfile : Profile 
{ 
    public MappingProfile() 
    { 
     CreateMap<Storage.Entities.Entities.BaseEntity, ViewModels.ViewModels.BaseViewModel>() 
      .Include<Storage.Entities.Entities.Certificate, ViewModels.ViewModels.Certificate>(); 
     CreateMap<Storage.Entities.Entities.Certificate, ViewModels.ViewModels.Certificate>(); 
    } 
} 

Зарегистрирован в ConfigureServices:

services.AddAutoMapper(); 

Все 3 класса, упомянутые выше, в различных проектах (если это делает любой Sence).

Этот конструктор контроллера:

private readonly Storage.Abstractions.Core.IStorage _storage; 
    private readonly IMapper _mapper; 
    public CertificateController(Storage.Abstractions.Core.IStorage storage, IMapper mapper) 
    { 
     this._storage = storage; 
     this._mapper = mapper; 
    } 

И Получ где я карта объект в ViewModel:

IEnumerable<Storage.Entities.Entities.Certificate> certificates = await this._storage.GetRepository<ICertificateRepository>().AllAsync(); 
    IEnumerable<ViewModels.ViewModels.Certificate>result = _mapper.Map<IEnumerable<Storage.Entities.Entities.Certificate>, IEnumerable<ViewModels.ViewModels.Certificate>>(certificates); 

выглядит правильно, верно? BUT:

Типы отображения ошибок.

типы карт: IEnumerable System.Collections.Generic.IEnumerable 1[[AlexanderTsema.Storage.Entities.Entities.Certificate, AlexanderTsema.Storage.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable 1 [[AlexanderTsema.ViewModels.ViewModels.Certificate, AlexanderTsema.ViewModels, Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = NULL]]

и Inner Exc: Отсутствует конфигурация карты типа или неподдерживаемое отображение.

типы карт: Certificate -> Сертификат AlexanderTsema.Storage.Entities.Entities.Certificate -> AlexanderTsema.ViewModels.ViewModels.Certificate

Пожалуйста, советы.

Я попытался отобразить Entity.Certificate для Entity.Certificate, и он отлично работает.

+0

Прочтите статьи в справочном центре, прежде чем отправлять запрос http://stackoverflow.com/help/tagging, в частности, ** Следует ли использовать теги в заголовках? ** Раздел: _Убежать вставлять теги в заголовки в любом из следующих форматов: [тег]: [вопрос название] _ – Tseng

+0

@ пользователь2970104 Быстрые вопросы, однако. Какая подпись «AddAutoMapper» делает IntelliSense, если вы удалите из нее все аргументы? Какую платформу вы используете, полную платформу .NET Framework или это приложение .NET Core? Я пытаюсь понять, почему вызов его без параметров не работал. –

+0

bot редактирует заголовок вопроса :(Это ASP.NET Core 1.1. Intellisense не показывает ничего конкретного. @ MickaëlDerriey – user2970104

ответ

0

Я думаю, что вам может не хватать, по крайней мере, один тип или сборку, которые AutoMapper может использовать для обнаружения профилей.

services.AddAutoMapper(typeof(MappingProfile)); должен сделать трюк.

Смежные вопросы