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

How to map info from the relationship table from the many-to-many relatonship table into entity model class using AutoMapper

如何将关系 table 中的信息映射到多对多关系,并将其一个或多个属性映射到该查询中使用的 table 之一的实体使用 AutoMapper。

例如,我有以下 3 tables:

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

我的Part模型对象定义如下:

public class PartModel
{
    public int PartId {get;set;}
    public string Description {get;set;}
    public bool IsOptional {get;set;}
}

如您所见,我在 PartModel 对象中定义了 IsOptional 属性,我想将 IsOptional 属性 从关系 table 映射到相关的 PartModel 对象。

我目前正在如下映射此关系并且它工作正常但如前所述,我需要将 IsOptional 属性 从关系 table 映射到相关部分:

CreateMap<ObjectData, ObjectModel>()
    .ForMember(o => o.Parts, opt => opt.MapFrom(opt => opt.ObjectsParts.Select(o => o.Parts)));

我怎样才能做到这一点?

我希望以上内容有意义。

谢谢。

假设您已经有 PartData -> PartModel 映射被 ObjectData.ObjectParts -> ObjectModel.Parts 映射的 Select 部分使用,删除 Select 部分并创建现在需要的映射 ObjectPartData -> PartModel.

ObjectPartData 包含您需要的所有数据。映射直接属性并使用 IncludeMembersPartData -> 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>();