图片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