首页 > 解决方案 > AutoMapper,反向映射不适用于嵌入式对象?

问题描述

我有一个类Affaire,包含Secteurs,包含关联Emplacement的 s,以及要转换的相应 DTO 对象。我用AutoMapper它。

public class Affaire 
{
    public string Nom { get; set; }

public class Emplacement
{
    public int AffaireId { get; set; }
    public Affaire Affaire { get; set; }

public class EmplacementDTO
{
    public int AffaireId { get; set; }
    public string AffaireNom { get; set; }

炮台被分组Secteur,以及它的Affaire

public class Secteur
{
    public int AffaireId { get; set; }
    public Affaire Affaire { get; set; }
    public IList<Emplacement> Emplacements { get; set; } = new List<Emplacement>();

当我从映射EmplacementEmplacementDTO我不想包含Affaire时,只有AffaireId

CreateMap<Emplacement, EmplacementDTO>()
    .ForMember(dto => dto.AffaireId, o => o.MapFrom(dto => dto.Affaire.Id))
    .ForMember(dto => dto.AffaireNom, o => o.MapFrom(dto => dto.Affaire.Nom))
    .ReverseMap()
    .ForPath(bo => bo.Affaire, o => o.MapFrom(dto => (Affaire)null)); // <<<< HERE

当 Emplacement 嵌入到容器中SecteurDTO时,此配置似乎不起作用,但是,对于容器本身,配置似乎起作用(其Affaire设置为 null):

CreateMap<Secteur, SecteurDTO>()
    .ForMember(dto => dto.AffaireId, o => o.MapFrom(dto => dto.Affaire.Id))
    .ForMember(dto => dto.AffaireNom, o => o.MapFrom(dto => dto.Affaire.Nom))
    .ReverseMap()
    .ForPath(bo => bo.Affaire, o => o.MapFrom(dto => (Affaire)null))

在此处输入图像描述

相关问题在这里

标签: c#asp.net-core-mvcmappingautomapper.net-5

解决方案


这是我项目中的工作演示:

模型:

public class Affaire
{
    public int Id { get; set; }
    public string Nom { get; set; }
    public IList<Emplacement> Emplacements { get; set; } = new List<Emplacement>();
}
public class Emplacement
{
    public int AffaireId { get; set; }
    public Affaire Affaire { get; set; }
}

public class Secteur
{
    public int AffaireId { get; set; }
    public Affaire Affaire { get; set; }
    public IList<Emplacement> Emplacements { get; set; } = new List<Emplacement>();
}

DTO:

public class EmplacementDTO
{
    public int AffaireId { get; set; }
    public string AffaireNom { get; set; }
    public Affaire Affaire { get; set; }
}
public class SecteurDTO
{
    public int AffaireId { get; set; }
    public string AffaireNom { get; set; }
    public Affaire Affaire { get; set; }
    public IList<EmplacementDTO> Emplacements { get; set; }
}

轮廓:

public class YourProfile : Profile
{

    public YourProfile()
    {
        CreateMap<Emplacement, EmplacementDTO>()
                .ForMember(dto => dto.AffaireId, o => o.MapFrom(dto => dto.Affaire.Id))
                .ForMember(dto => dto.AffaireNom, o => o.MapFrom(dto => dto.Affaire.Nom))
                .ReverseMap()
                .ForPath(bo => bo.Affaire, o => o.MapFrom(dto => (Affaire)null));

        CreateMap<Secteur, SecteurDTO>()
                .ForMember(dto => dto.AffaireId, o => o.MapFrom(dto => dto.Affaire.Id))
                .ForMember(dto => dto.AffaireNom, o => o.MapFrom(dto => dto.Affaire.Nom))
                .ReverseMap()
                .ForPath(bo => bo.Affaire, o => o.MapFrom(dto => (Affaire)null));
    }

}

后端测试代码:

public List<EmployeeModel> Index(List<SecteurDTO> dto)
{
    dto = new List<SecteurDTO>()
    {
        new SecteurDTO(){
            AffaireId=1,
            AffaireNom="aaa",
            Emplacements = new List<EmplacementDTO>()
            {
                new EmplacementDTO(){AffaireId=1,Affaire=new Affaire(){Id=1,Nom="aa"}}
            },
            Affaire=new Affaire(){
                Id=1,
                Nom="aaa",
                Emplacements=new List<Emplacement>()
                {
                    new Emplacement(){AffaireId=1,Affaire=new Affaire(){Id=1,Nom="aa"}}
                }
            }
        }
    };
    var bo= new List<Secteur>() { };

    var mapper = _mapper.Map(dto, bo);

    //...
}

结果:

在此处输入图像描述


推荐阅读