如何使用AutoMapper从多对多关系映射关系表中的信息,并将其一个或多个属性映射到该查询中使用的表中的实体。
例如,我有以下3个表:
Part
====
PartId Description
1 Part1
2 Part2
3 Part3
Object
======
ObjectId Description
1 Obj1
2 Obj2
Objects_Parts
=============
ObjectId PartId IsRequired
1 1 True
1 2
2 1 True
2 3 True
My Part模型对象定义如下:
public class PartModel
{
public int PartId {get;set;}
public string Description {get;set;}
public bool IsOptional {get;set;}
}
正如您所看到的,我在PartModel对象中定义了IsOptional属性,并且我希望将IsOptional特性从关系表映射到相关的PartModel对象。
我目前正在按如下方式映射此关系,它运行良好,但如前所述,我需要将关系表中的IsOptional属性映射到相关部分:
CreateMap<ObjectData, ObjectModel>()
.ForMember(o => o.Parts, opt => opt.MapFrom(opt => opt.ObjectsParts.Select(o => o.Parts)));
我怎样才能做到这一点?
我希望以上内容有道理。
谢谢。
假设ObjectData.ObjectParts -> ObjectModel.Parts
映射的Select
部分已经使用了PartData -> PartModel
映射,则删除Select
部分并创建现在所需的映射ObjectPartData -> PartModel
。
ObjectPartData
包含您需要的所有数据。映射直接属性,并使用IncludeMembers从PartData -> PartModel
映射映射其余属性。
例如
// (1)
CreateMap<ObjectData, ObjectModel>()
.ForMember(dst => dst.Parts, opt => opt.MapFrom(src => src.ObjectParts)); // requires/uses (2)
// (2)
CreateMap<ObjectPartData, PartModel>()
.IncludeMembers(src => src.Part) // requires/uses (3)
.ForMember(dst => dst.IsOptional, opt => opt.MapFrom(src => !src.IsRequired));
// (3)
CreateMap<PartData, PartModel>();