我有两个模型 DashboardWidgetModel 和 WidgetModel 我想映射到单个视图模型 WidgetViewModel 。
关联仪表板小组件模型
public DashboardWidgetModel()
{
public int Id {get;set;}
public int DashboardId {get;set;}
public int WidgetId {get;set;}
public virtual Widget Widget {get;set;}
public int PositionX{get;set;}
public int PositionY {get;set;}
}
小部件模型
public WidgetModel()
{
public int Id {get;set;}
public string Name {get;set;}
public string Desc {get;set;}
public int P3{get;set;}
public int P4 {get;set;}
public int P5 {get;set;}
}
窗口小部件视图模型
public WidgetViewModel()
{
public int Id {get;set;}
public string PositionX {get;set;}
public string PositionY {get;set;}
public string Name {get;set;}
public string Desc {get;set;}
public int P3 {get;set;}
public int P4 {get;set;}
public int P5 {get;set;}
}
我正在使用AutoMapper来处理我应用程序其余部分的映射,并希望将所有属性映射到单个平面视图模型。问题是Widgets
是一个嵌套对象。
不是手动定义要从子对象映射的每个项目,而是有办法自动执行此操作吗?
public DashboardProfile()
{
CreateMap<DashboardToWidget, WidgetViewModel>()
.ForMember(vm => vm.Name, opt => opt.MapFrom(m => m.Widget.Name))
.ForMember(vm => vm.Desc, opt => opt.MapFrom(m => m.Widget.Desc))
.ForMember(vm => vm.P3, opt => opt.MapFrom(m => m.Widget.P3))
.ForMember(vm => vm.P4, opt => opt.MapFrom(m => m.Widget.P4))
.ForMember(vm => vm.P5, opt => opt.MapFrom(m => m.Widget.P5));
CreateMap<Widget, WidgetViewModel>();
}
感觉好像我需要将DashboardWidgetModel
映射到WidgetViewModel
,然后将WidgetModel
映射到同一WidgetViewModel
之后,但我不确定如何执行此操作或用于找到答案的术语。
编辑(在CSL回答之后):由于继承,我无法更改属性名称。
答案 0 :(得分:1)
如果您将目标属性名称更改为以Widget
为前缀,则无需任何自定义映射,AutoMapper将自动计算出您要引用Widget类的子属性:
public WidgetViewModel()
{
public int Id {get;set;}
public string PositionX {get;set;}
public string PositionY {get;set;}
public string WidgetName {get;set;}
public string WidgetDesc {get;set;}
public int WidgetP3 {get;set;}
public int WidgetP4 {get;set;}
public int WidgetP5 {get;set;}
}
映射将简单地变为:
public DashboardProfile()
{
CreateMap<DashboardWidgetModel, WidgetViewModel>();
}