【发布时间】:2021-12-30 19:32:48
【问题描述】:
我有四个由 Entity Framework Core (2.1.4) 自动生成的模型(使用脚手架),它们之间相互关联。
public partial class Run
{
public int Id { get; set; }
public int RunCarId { get; set; }
public int RunExtraInfoId { get; set; }
...
public RunExtraInfo RunExtraInfo{ get; set; }
public RunCar RunCar{ get; set; }
public ICollection<Weighing> Weighings{ get; set; }
}
public partial class RunExtraInfo
{
public int Id { get; set; }
...
public ICollection<CorridaCt> Runs { get; set; }
}
public partial class RunCar
{
public int Id { get; set; }
...
public Run Run{ get; set; }
}
public partial class Weighing
{
public int Id { get; set; }
public int RunId { get; set; }
...
public Run Run{ get; set; }
}
但每当我在 Run 上包含我需要的所有信息时,所有其他关系都会加载到实体中,这使得它非常递归。
例子:
var runs = ContextSQL.Runs
.Include(c => c.RunExtraInfo)
.Include(c => c.RunCar)
.Include(c => c.Weighings)
.ToList();
return runs;
生成:
[
{
id: 0,
...
runExtraInfo: {
id: 0,
...
runs: [
{
id: 0,
runExtraInfo: {id: 0 runs: [...]},
runCar: {id: 0, runs: [...]}
}
]
},
runcar: {
id: 0,
runs: [
{id: 0, runExtraInfo: [...], runs: [...]}
]
}
}
]
我认为只有当我们用Include() 明确包含它们时,实体才应该包含关系,我错了吗?
我该如何解决这个问题?
【问题讨论】:
-
一种选择是在要防止递归的地方使用属性
[Script Ignore]。 -
简而言之,您无法阻止 EF Core 这样做,因为这是设计使然。如果您有序列化问题,请使用单独的类或序列化选项/属性。
标签: c# linq entity-framework-core