AutoMapper,反向映射不适用于嵌入对象?

AutoMapper, the reverse map not working for embedded objects?

我有一个 class Affaire,包含 Secteurs,包含关联的 Emplacements,以及相应的要转换的 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>();

当我从 Emplacement 映射到 EmplacementDTO 时,我不想包含 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 设置为空):

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

相关问题here

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

型号:

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

    //...
}

结果: