2017-08-26 41 views
1

我正在嘗試編寫下一個案例的映射配置。我有域對象:如何在Automapper 6中使用比源代碼更少的屬性映射到目標?

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string ImagePath { get; set; } 

    public virtual ICollection<Service> Services { get; set; } 
    public int? SubcategoryId { get; set; } 
    [ForeignKey("SubcategoryId")] 
    public virtual Category Subcategory { get; set; } 
} 

而且DTO映射:

public class CategoryDto 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string ImagePath { get; set; } 
} 

問題是,目標類具有以下性質,比源極。如果我使用簡單的地圖,我會得到一個異常。我不能使用Ignore(),因爲它將應用於目標類,而不是源代碼。由於某種原因,方法ForSourceMember()也沒有幫助。我讀this的問題,大多數情況下都可以,但屬性Services不是null,它是Count = 0,當它爲空時。我也閱讀了一些類似的問題,但他們沒有幫助,也許他們在以前的版本中工作過。

希望有人可以幫助我找到解決辦法,或解釋我錯過了什麼。

+0

地圖沒有問題,實際上就是這個想法,你的目的地可以有更少的東西。所以我不知道你看到了什麼錯誤,但就AM而言,你的地圖是好的。 –

+0

@LucianBargaoanu具有消息:錯誤映射類型的「AutoMapperMappingException」異常。映射類型:'IEnumerable'1 - > List'1 System.Collections.Generic.IEnumerable'1 [[DomainEntities.Category]] - > System.Collections.Generic.List'1 [[Web.Dtos.CategoryDto]]''。內部例外是缺少類型映射配置或不支持的映射。映射類型:類別 - > CategoryDto,DomainEntities.Category - > Web.Dtos.CategoryDto'。 'Mapper.Map ,List >(_ unitOfWork.Categories.GetAll())'拋出異常。通常這意味着他找不到一對支柱 – QuarK

+0

repro會有幫助。製作[gist](https://gist.github.com/lbargaoanu/9c7233441c3a3413cc2b9b9ebb5964a9),我們可以執行並看到失敗。 –

回答

1

Mapper.Initialize只能在您的應用初始化時調用一次,而不是按照您現在要做的每個請求進行初始化。

+0

所以mapper只會記住'訂單'的最後一張地圖,不是嗎?有什麼方法可以有多個地圖配置嗎?你的第二個評論的例子是否合適? – QuarK

+1

是的。在一個Initialize調用中,可以有許多CreateMap-s。或使用配置文件。 [docs](https://github.com/AutoMapper/AutoMapper/wiki/Configuration)。 –

+0

基督,剛剛實現的AutoMapper開發人員幫我解決了我的愚蠢問題。我甚至不是初中,我不配!萬分感謝。 – QuarK

相關問題