asp.net-mvc - 通过生成 Entity Framework 脚手架 API Controller 错误使用 Web API

标签 asp.net-mvc database json entity-framework asp.net-web-api

我有捕鸟模型:

public class Order 
{ 
    public int OrderId { get; set; } 
    //
    public virtual ICollection<Client> Clients { get; set; } 
} 

public class Client 
{ 
    public int ClientId { get; set; } 
    public string ClientName { get; set; } 
    public virtual Order Order { get; set; } 
} 

当我通过生成 EF 脚手架 API Controller 来使用 Web Api 时,它不起作用。 错误如下:

Self referencing loop detected for property 'Order' with type 
'System.Data.Entity.DynamicProxies.Order_A97AC61AD05BA6A886755C779FD3F96E86FE903ED7C9BA9400E79162C11BA719'. 
Path '[0].Order[0]'

谁能帮我解决这个问题?

最佳答案

序列化程序无法处理循环引用。您可以在数据上下文类中禁用它:

public YourDbContext() : base("name=YourConnectionString") 
 { 
     Database.SetInitializer(new CircularReferenceDataInitializer()); 
     this.Configuration.LazyLoadingEnabled = false; 
     this.Configuration.ProxyCreationEnabled = false; 
 } 

这样,导航属性就不会延迟加载了。如果你想使用延迟加载,你可以尝试以下方法:

1) 通过忽略它来处理循环引用。在您的 WebApiConfig.cs 文件中添加以下代码。

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

2) 通过在您的 WebApiConfig.cs 文件中添加以下代码来保留循环引用。

 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize; 
 config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;

希望对您有所帮助。

关于asp.net-mvc - 通过生成 Entity Framework 脚手架 API Controller 错误使用 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19883175/

相关文章:

asp.net-mvc - 如何使用带有点分隔名称的 JSON.Net CamelCasePropertyNamesContractResolver ?

c# - 使用 Razor 在 asp.net 中同一索引的不同部分 View 之间共享数据

javascript - 如何正确地将 javascript 与 razor 语法结合起来

mysql删除重复项

java - 我的 json 代码工作正常,但是当添加 Glide 来解析图像时应用程序强制停止

javascript - 在 javascript 上获取 JSON 对象内数组的索引

python - 在 Python 中编写从 SPARQL 查询返回的 JSON 数据的正确方法

c# - 如何开始学习 Asp.Net MVC

C# 从 MySQL 读取重复同一行

php - 连接到免费托管数据库时出错