我坚持使用automapper.collection在automapper中配置以下多对多关系。现有实体已正确映射,但新的DTO未添加到PersonXUnionList。对于DTO,我对实体使用相同的类。
这是基本结构:
public class Union
{
public int Id { get; set; }
public List<PersonXUnion> PersonXUnionList { get; set; } = new List<PersonXUnion>();
}
public class PersonXUnion
{
public int Id { get; set; }
public int PersonId { get; set; }
public Person Person { get; set; }
public int UnionId { get; set; }
public Union Union { get; set; }
}
public class Person
{
public int Id { get; set; }
public List<PersonXUnion> PersonXUnionList { get; set; } = new List<PersonXUnion>();
}
这是自动映射器配置中与该关系有关的部分:
var config = new MapperConfiguration(cfg =>
{
cfg.AddCollectionMappers();
cfg.CreateMap<Union, Union>()
.EqualityComparison((odto, o) => odto.Id == o.Id)
.ForMember(d => d.PersonXUnionList, o => o.MapFrom(s => s.PersonXUnionList))
;
cfg.CreateMap<PersonXUnion, PersonXUnion>()
.EqualityComparison((odto, o) => odto.Id == o.Id)
.ForMember(dest => dest.Person,
m => m.MapFrom(clientJsonObj =>
_context.Person.FirstOrDefault(
contextDb => contextDb.Id == clientJsonObj.Person.Id)))
.ForMember(d => d.Union, o => o.MapFrom(s => s.Union))
;
cfg.CreateMap<Person, Person>()
.EqualityComparison((odto, o) => odto.Id == o.Id)
;
}
非常感谢您的任何建议!