在 Web Api 中返回任何结果之前,我在 EF5 中禁用了延迟加载和代理创建。一切正常。但是,当我开始对Include()
其他实体进行渴望获取时,一些 JSON 对象看起来像这样:
{
$ref: "14"
},
.. correct objects ..
{
$ref: "6"
},
..
"$ref"
结果列表中包含什么?
在 Web Api 中返回任何结果之前,我在 EF5 中禁用了延迟加载和代理创建。一切正常。但是,当我开始对Include()
其他实体进行渴望获取时,一些 JSON 对象看起来像这样:
{
$ref: "14"
},
.. correct objects ..
{
$ref: "6"
},
..
"$ref"
结果列表中包含什么?
它来自 JSON.NET 序列化程序。它保留了对象引用。看看following blog post
。我猜你的对象图中有一些循环引用,而 JSON.NET 正在尽最大努力序列化这个 EF 结构而不会崩溃(这是大多数 JSON 序列化程序无论如何都会做的)。虽然这不是一个标准。
个人建议:永远不要序列化你的 EF 实体。始终定义视图模型并让您的 Web API 方法返回仅包含您感兴趣的属性的视图模型。
如果必须序列化 EF 实体,还可以禁用延迟加载。它对我有用。
转到 edmx 文件下的 context.cs 文件,并在构造函数中添加此行。
this.Configuration.LazyLoadingEnabled = false;