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



我的数据库中有两个实体。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; }
}

现在我想在我的数据中隐藏这个关系表,如下所示:

public class ADTO
{
public ICollection<B> Bs { get; set; }
}

我想要一个单独的B集合,直接表示我的实例,而不是关系表。我想要一个自动映射器配置文件,它从实体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>();
}
}

我缺少的是相反的方向:从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));