如何使用AutoMapper将关系表中的信息从多对多关系映射到实体模型类中



如何使用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>();

最新更新