2016-10-22 77 views
0

我有一個複雜的領域模型,與系統中的其他實體有很多關係。AutoMapper - 壓平域模型以查看模型。一個是關係很多

爲了編輯這個模型,我想設置一個簡化事物的視圖模型。我想將模型分解成更小的邏輯塊,併爲每個部分編輯屏幕,而不是試圖在一個屏幕上表示整個模型。

在我有一個域模型是一對多的關係它被表示如下:

public partial class CbItemsContent 
{ 

    public CbItemsContent() 
    { 
     this.cbItemsContentRegulators = new HashSet<cbItemsContentRegulator>(); 
    } 

    public int ItemContentId { get; set; } 
    public int ItemID { get; set; } 
    ...... 

    public virtual CbItem CbItem { get; set; } 
    public virtual ICollection<cbItemsContentRegulator> cbItemsContentRegulators { get; set; } 
} 

cbItemsContentRegulator是另一組實體的由CbItemsContent(上文所示的模型)

我想換成cbItemsContentRegulators的收藏在我和簡化的視圖模型的模型稱爲ItemContentRegulatorsViewModel這樣的:

public class ItemContentRegulatorsViewModel 
{ 
    public int ItemContentId { get; set; } 

    public int[] RegulatorIds { get; set; } 
} 

它減少了與ItemContent父ID和int數組的關係,如果Regulator ID

是我想要做的事情嗎?

如何映射我CbItemsContentRegulators收集到一個int [IDS

回答

0

假設你正在使用實體框架的],你應該改變視圖模型

public class ItemContentRegulatorsViewModel 
{ 
    public int ItemContentId { get; set; } 
    public IList<int> RegulatorIds { get; set; } // IList 
} 

不,你可以定義映射:

var profile = Mapper.CreateProfile("SomeName"); 
profile.CreateMap<CbItemsContent,ItemContentRegulatorsViewModel>() 
     .ForMember(dest => dest.RegulatorIds, 
      m => m.MapFrom(src => src.cbItemsContentRegulators.Select(c => c.RegulatorId))); 

現在你可以使用它在查詢,如:

context.CbItemsContents.ProjectTo<ItemContentRegulatorsViewModel>() 

RegulatorIds作爲一個數組,這將拋出一個異常,ToArray不被識別。