AutoMapper - 展平域模型以查看模型。一个是很多关系

时间:2016-10-22 09:32:43

标签: c# asp.net-mvc model 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(上面显示的模型)所拥有的另一组实体

我想用一个名为ItemContentRegulatorsViewModel的简化viewModel替换我的模型中的cbItemsContentRegulators集合,如下所示:

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

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

减少与ItemContent父ID的关系,如果Regulator ID

则减少int数组

是我想要做的事情吗?

如何将我的CbItemsContentRegulators集合映射到ID的int []

1 个答案:

答案 0 :(得分:0)

假设您正在使用Entity Framework,则应将视图模型更改为

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无法识别的异常。