鉴于以下域实体:
public class Person {
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual ISet<PersonClub> Clubs { get; set; }
public Person() {
this.Clubs = new HashSet<PersonClub>();
}
}
public class Club {
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual ISet<PersonClub> Members { get; set; }
public Club() {
this.Persons = new HashSet<PersonClub>();
}
}
public class PersonClub {
public virtual Guid Id { get; set; }
public virtual Person Person { get; set; }
public virtual Club Club { get; set; }
}
和DTO:
public class PersonDTO {
public Guid Id { get; set; }
public string Name { get; set; }
public ISet<ClubDTO> Clubs { get; set; }
public PersonDTO() {
this.Clubs = new HashSet<ClubDTO>();
}
}
public class ClubDTO {
public Guid Id { get; set; }
public string Name { get; set; }
public ISet<PersonDTO> Members { get; set; }
public ClubDTO() {
this.Members = new HashSet<PersonDTO>();
}
}
有没有办法将这些域实体映射到他们的DTO?问题是PersonDTO需要一个ClubDTO的集合,而不仅仅是Club,而ClubDTO需要一个PersonDTO而不仅仅是Person的集合。
此设计在尝试映射PersonClub时会导致无限循环 - &gt; PersonDTO和PersonClub - &gt; ClubDTO:
Mapper.CreateMap<Person, PersonDTO>();
Mapper.CreateMap<Club, ClubDTO>();
Mapper.CreateMap<PersonClub, ClubDTO>()
.ConvertUsing(x => Mapper.Map<Club, ClubDTO>(x.Club));
Mapper.CreateMap<PersonClub, PersonDTO>()
.ConvertUsing(x => Mapper.Map<Person, PersonDTO>(x.Person));
我理解为什么会这样,但我很好奇其他人如何处理这种情况。
在这种情况下,当调用Mapper.Map<Person, PersonDTO>(personEntity)
时,没有必要加载一个人所属的所有俱乐部的所有成员(这种关系不需要那么深入)。 Mapper.Map<Club, ClubDTO>(clubEntity)
也是如此。
这是一个设计缺陷吗?不拥有PersonClub域实体并且只有public virtual ISet<Club> Clubs { get; set; }
作为ManyToMany关系会更好吗?虽然我相信这仍然会导致循环引用。
赞赏任何意见。