2017-01-28 119 views
0

我有一個實體: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; } 
} 

而且我有一個視圖模型:

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,我想擺脫它)。 我有映射簡介:

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; 
    } 

而且GET方法,我映射實體視圖模型:

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); 

看起來是正確的,對不對? 但是:

錯誤映射類型。

映射類型: 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,版本= 1.0.0.0,文化=中性公鑰=空]]

和Inner Exc: 缺少類型映射配置或不支持的映射。

映射類型: 證書 - >證書 AlexanderTsema.Storage.Entities.Entities.Certificate - > AlexanderTsema.ViewModels.ViewModels.Certificate

請指點。

我試圖將Entity.Certificate映射到Entity.Certificate,它工作正常。

+0

在發佈quiestion之前閱讀幫助中心文章http://stackoverflow.com/help/tagging特別是**我應該在標題中使用標籤嗎?**部分:_避免將標籤插入以下任何格式的標題中: [標籤]:[問題標題] _ – Tseng

+0

@ user2970104快速的問題,但。如果您從中刪除所有參數,智能感知會向您顯示「AddAutoMapper」的什麼簽名?您使用的是哪個平臺,完整的.NET Framework還是.NET Core應用程序?我試圖理解爲什麼調用它沒有參數不起作用。 –

+0

bot編輯問題標題:(這是ASP.NET Core 1.1。Intellisense沒有顯示任何具體內容。@MickaëlDerriey – user2970104

回答

0

我想你可能會缺少的是AutoMapper可以用來發現配置文件的至少一種類型或程序集。

services.AddAutoMapper(typeof(MappingProfile));應該這樣做。