实体框架中的自我引用6代码优先
本文关键字:代码 引用 自我 框架 实体 | 更新日期: 2023-09-27 18:09:57
我的代码中有这些类:
public class Parent
{
[Key]
public int ParentID { get; set; }
public string ParentName { get; set; }
public virtual ICollection<Child> Childs { get; set; }
}
public class Child
{
[Key]
public int ChildID { get; set; }
public string ChildName { get; set; }
public int ParentID { get; set; }
[ForeignKey("ParentID")]
public virtual Parent Parent { get; set; }
}
Parent
与Child
具有一对多关系,Child
具有Parent
性质。这将来会给我带来麻烦吗?因为当我试图用Newtonsoft将这个类转换为JObject
时,我刚刚得到了Self referencing loop detected
异常。我是否应该从Child
中删除Parent
属性,这样就不会导致自我引用?
问题是,当您去序列化这些类中的任何一个时,您确实有一个循环引用。父节点有一个子节点列表,这些子节点依次链接回父节点。
用JsonIgnoreAttribute
修饰Child.Parent
,它将停止尝试序列化此属性。它作为导航属性肯定很有用,但我想不出一个实际的情况,你想要整个Parent对象序列化为Child的成员。(保留父节点的id可能有用)
有两种方法来处理这个错误。首先,你可以忽略导航属性(virtual iccollection)。因为。这是用于导航和序列化效果的
自引用循环检测到异常
这发生在Newtonsoft或XmlSerializer。
第二,可以使用不带代理的POCO
类来序列化。