Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用AutoMapper将关系表中的信息从多对多关系表映射到实体模型类_C#_Entity Framework_Automapper - Fatal编程技术网

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

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

如何从多对多关系映射关系表中的信息,并使用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
我的零件模型对象定义如下:

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>();