圖片a Person
和Group
類與多對多的關係。一個人有一個組的列表,一個組有一個人的列表。如何在AutoMapper映射中忽略屬性的屬性?
當映射Person
到PersonDTO
我有一個stack overflow exception
因爲AutoMapper不能處理Person
>Groups
>Members
>Groups
>Members
> ...
所以這裏的示例代碼:
public class Person
{
public string Name { get; set; }
public List<Group> Groups { get; set; }
}
public class Group
{
public string Name { get; set; }
public List<Person> Members { get; set; }
}
public class PersonDTO
{
public string Name { get; set; }
public List<GroupDTO> Groups { get; set; }
}
public class GroupDTO
{
public string Name { get; set; }
public List<PersonDTO> Members { get; set; }
}
當我使用.ForMember創建一個映射器時,第一個執行的映射器會拋出一個null reference exception
。
下面是映射器的代碼:
CreateMap<Person, PersonDTO>()
.ForMember(x => x.Groups.Select(y => y.Members), opt => opt.Ignore())
.ReverseMap();
CreateMap<Group, GroupDTO>()
.ForMember(x => x.Members.Select(y => y.Groups), opt => opt.Ignore())
.ReverseMap();
所以我缺少什麼或者做錯了嗎?當我刪除.ForMember方法時,null reference exception
不再被拋出。
更新:我真的想強調我的問題的要點是如何忽略屬性的屬性。這段代碼只是一個相當簡單的例子。
更新2:這是我的固定它,非常感謝Lucian-Bargaoanu
CreateMap<Person, PersonDTO>()
.ForMember(x => x.Groups.Select(y => y.Members), opt => opt.Ignore())
.PreserveReferences() // This is the solution!
.ReverseMap();
CreateMap<Group, GroupDTO>()
.ForMember(x => x.Members.Select(y => y.Groups), opt => opt.Ignore())
.PreserveReferences() // This is the solution!
.ReverseMap();
由於.PreserveReferences()
循環引用拿不動!
謝謝@Esperadoce,但我的代碼比示例稍微簡單一些。我真的想在AutoMapper中忽略屬性**的**屬性。 – Mason
是的,你是對的,我刪除我的國旗! – Esperadoce
是@KirillShlenskiy,他們確實是領域,我只是想保持它非常簡單。我會更新我的問題。 – Mason