AutoMapper,反向映射不适用于嵌入式对象?
Posted
技术标签:
【中文标题】AutoMapper,反向映射不适用于嵌入式对象?【英文标题】:AutoMapper, the reverse map not working for embedded objects? 【发布时间】:2021-08-11 10:23:03 【问题描述】:我有一个类Affaire
,包含Secteur
s,包含关联的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;
Emplacements 分组在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
设置为 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))
相关问题here
【问题讨论】:
嗨@Serge,我无法重现该问题,请分享您的整个模型设计。 【参考方案1】:这是我项目中的工作演示:
型号:
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);
//...
结果:
【讨论】:
不确定会发生什么,我删除了一些 EF 对象加载,根本不加载 Affaire,只有 Ids...所以可能自动映射器工作正常,或者不能,我无法测试,但是如果您的样品工作正常。然而,重要的是要查看之前(事务不为空)和之后(事务为空)的对象状态以上是关于AutoMapper,反向映射不适用于嵌入式对象?的主要内容,如果未能解决你的问题,请参考以下文章