【问题标题】:How to map a DTO with a many-to-many relationship to a EF core entity with a relationship table using automapper?如何使用自动映射器将具有多对多关系的 DTO 映射到具有关系表的 EF 核心实体?
【发布时间】:2020-06-01 07:35:00
【问题描述】:

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

现在我想像这样在我的 dto 中隐藏这个关系表:

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 及其对关系表实体的引用。

【问题讨论】:

    标签: c# asp.net-core entity-framework-core automapper fluent


    【解决方案1】:

    使您的个人资料如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2018-01-13
      • 2019-01-14
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多