AutoMapper - 压平域模型以查看模型。一个是关系很多
问题描述:
我有一个复杂的领域模型,与系统中的其他实体有很多关系。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
答
假设你正在使用实体框架的],你应该改变视图模型
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
不被识别。