C# 如何使用automapper将具有多对多关系的DTO映射到具有关系表的EF核心实体?

C# 如何使用automapper将具有多对多关系的DTO映射到具有关系表的EF核心实体?,c#,asp.net-core,entity-framework-core,automapper,fluent,C#,Asp.net Core,Entity Framework Core,Automapper,Fluent,我的数据库中有两个实体。A和B。我还有一个关系表,表示这些实体AB之间的多对多关系: public class A { public ICollection<AB> ABs { get; set; } } public class B { public ICollection<AB> ABs { get; set; } } public class AB { public A A { get; set; } public B B { g

我的数据库中有两个实体。A和B。我还有一个关系表,表示这些实体AB之间的多对多关系:

public class A
{
    public ICollection<AB> ABs { get; set; }
}

public class B
{
    public ICollection<AB> ABs { get; set; }
}

public class AB
{
    public A A { get; set; }
    public B B { get; set; }
}
公共A类
{
公共ICollection ABs{get;set;}
}
公共B级
{
公共ICollection ABs{get;set;}
}
公共AB类
{
公共A{get;set;}
公共B{get;set;}
}
现在我想在我的数据中隐藏此关系表,如下所示:

public class ADTO
{
    public ICollection<B> Bs { get; set; }
}
公共类ADTO
{
公共ICollection Bs{get;set;}
}
我想要一个具有直接表示的实例的Bs集合,而不是关系表。我希望有一个automapper配置文件,它可以从实体B列表映射到以前不存在的实体AB列表,并将B作为属性,以及实例a本身

我已经实现了从A到ADTO的映射器,如下所示:

public class AProfile : Profile
{
    public AProfile()
    {
        CreateMap<A, ADTO>()
            .ForMember(dest => dest.B, opt => opt.MapFrom(src => src.AB.Select(y => y.B).ToList()));
        CreateMap<ADTO, A>();
    }
}
public类AProfile:Profile
{
公共AProfile()
{
CreateMap()
.ForMember(dest=>dest.B,opt=>opt.MapFrom(src=>src.AB.Select(y=>y.B.ToList());
CreateMap();
}
}

我缺少的是相反的方向:从ADTO及其实体列表到A及其对关系表实体的引用。

使您的配置文件如下所示:

  CreateMap<ADTO, A>()
            .ForMember(dest => dest.AName, opt => opt.MapFrom(src => src.AName))
            .ForMember(dest => dest.ABs, opt => opt.MapFrom(src => src.Bs))
            .AfterMap((src, dest) =>{
                foreach(var b in dest.ABs)
                {
                    b.AId = src.Id;
                }
            });
  CreateMap<B, AB>()
            .ForMember(dest=>dest.BId,opt=>opt.MapFrom(src=>src.Id))
            .ForMember(dest=>dest.B,opt=>opt.MapFrom(src=>src));
CreateMap()
.ForMember(dest=>dest.AName,opt=>opt.MapFrom(src=>src.AName))
.ForMember(dest=>dest.ABs,opt=>opt.MapFrom(src=>src.Bs))
.AfterMap((src,dest)=>{
foreach(目标资产负债表中的变量b)
{
b、 AId=src.Id;
}
});
CreateMap()
.ForMember(dest=>dest.BId,opt=>opt.MapFrom(src=>src.Id))
.ForMember(dest=>dest.B,opt=>opt.MapFrom(src=>src));