【发布时间】:2020-02-20 13:13:47
【问题描述】:
我在一个域模型中有一个父子属性。
public class TestModel
{
public int ParentID { get; set; }
public int ID{ get; set; }
public string Name{ get; set; }
public virtual TestModel parent { get; set; }
public virtual List<TestModel> children { get; set; }
}
当我写OnModelCreating事件如下:
builder.Entity<TestModel>().HasOne(b => b.parent).WithMany(a => a.children).HasForeignKey(b => b.ID);
在调试模式下,子节点返回相同的层次结构,并且在 JsonConvert.SerializeObject 上出现“为属性“父”检测到具有类型 TestModel 的自引用循环”错误。
当我改变OnModelCreating事件如下:
builder.Entity<TestModel>().HasOne(b => b.parent).WithMany(a => a.children).HasForeignKey(b => b.ParentID);
然后 children 属性返回 null。我怎么解决这个问题?如何正确加载子属性?
我希望有人可以帮助我。
PS:TestModel 不在任何上下文中,所以我不能包含。我创建了一个 sql 查询并使用 FromSql()
【问题讨论】:
-
我想当你使用 b.ID 时,链接是 ID 字段,但是当你使用 ParentID 时,你使用的是其他信息,所以你可以有零行
-
获取实体时是否使用.Include(x => x.children)?
-
您的问题似乎与 JSON.NET 而不是实体框架有关。默认情况下,它不会序列化自引用对象。在这里查看:newtonsoft.com/json/help/html/…
-
抱歉,TestModel 不在任何上下文中,所以我不能包含。我创建了一个 sql 查询并使用 FromSql()
标签: c# asp.net entity-framework entity-framework-core