C# 如何使用AutoMapper将关系表中的信息从多对多关系表映射到实体模型类
如何从多对多关系映射关系表中的信息,并使用AutoMapper将其一个或多个属性映射到该查询中使用的一个表中的实体 例如,我有以下3个表:C# 如何使用AutoMapper将关系表中的信息从多对多关系表映射到实体模型类,c#,entity-framework,automapper,C#,Entity Framework,Automapper,如何从多对多关系映射关系表中的信息,并使用AutoMapper将其一个或多个属性映射到该查询中使用的一个表中的实体 例如,我有以下3个表: Part ==== PartId Description 1 Part1 2 Part2 3 Part3 Object ====== ObjectId Description 1 Obj1 2 Obj2 Objects_Parts ============= Objec
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
我的零件模型对象定义如下:
public class PartModel
{
public int PartId {get;set;}
public string Description {get;set;}
public bool IsOptional {get;set;}
}
如您所见,我在PartModel对象中定义了等参属性,我希望将等参属性从关系表映射到相关PartModel对象
我目前正在映射此关系,如下所示,它工作正常,但如前所述,我需要将等参属性从关系表映射到相关部分:
CreateMap<ObjectData, ObjectModel>()
.ForMember(o => o.Parts, opt => opt.MapFrom(opt => opt.ObjectsParts.Select(o => o.Parts)));
CreateMap()
.ForMember(o=>o.Parts,opt=>opt.MapFrom(opt=>opt.ObjectsParts.Select(o=>o.Parts));
我怎样才能做到这一点
我希望上面的说法有道理
谢谢。假设您已经有
PartData->PartModel
映射所使用的Select
部分ObjectData.ObjectParts->ObjectModel.Parts
映射,移除选择部分并创建现在所需的映射ObjectPartData->PartModel
ObjectPartData
包含您需要的所有数据。映射直接属性,并使用映射从PartData->PartModel
映射中映射其余属性
e、 g
//(1)
CreateMap()
.ForMember(dst=>dst.Parts,opt=>opt.MapFrom(src=>src.ObjectParts));//需要/使用(2)
// (2)
CreateMap()
.IncludeMembers(src=>src.Part)//需要/使用(3)
.ForMember(dst=>dst.iso可选,opt=>opt.MapFrom(src=>!src.IsRequired));
// (3)
CreateMap();
假设您已经有PartData->PartModel
映射所使用的Select
部分ObjectData.ObjectParts->ObjectModel.Parts
映射,移除Select
部分并创建现在所需的映射ObjectPartData->PartModel
ObjectPartData
包含您需要的所有数据。映射直接属性,并使用映射从PartData->PartModel
映射中映射其余属性
e、 g
//(1)
CreateMap()
.ForMember(dst=>dst.Parts,opt=>opt.MapFrom(src=>src.ObjectParts));//需要/使用(2)
// (2)
CreateMap()
.IncludeMembers(src=>src.Part)//需要/使用(3)
.ForMember(dst=>dst.iso可选,opt=>opt.MapFrom(src=>!src.IsRequired));
// (3)
CreateMap();
我可以看到您在做什么,但我仍在试图找出它不起作用的原因。你提供的代码是只更新了等参域还是映射了整个部分?我最后对我所有的映射进行了注释,并从一个文件开始,因为我将它们分解到了不同的文件中,这使它更难理解。一旦我这样做了,并一个接一个地重新添加了每个映射,最终得到了你的解决方案,它很有魅力!再次感谢!我知道你在做什么,但我仍在试图弄清楚为什么它不起作用。你提供的代码是只更新了等参域还是映射了整个部分?我最后对我所有的映射进行了注释,并从一个文件开始,因为我将它们分解到了不同的文件中,这使它更难理解。一旦我这样做了,并一个接一个地重新添加了每个映射,最终得到了你的解决方案,它很有魅力!再次感谢!
// (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>();