具有多对多关系的自动映射器

时间:2019-04-02 11:54:17

标签: automapper

我坚持使用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)
                ;

}

非常感谢您的任何建议!

0 个答案:

没有答案