【问题标题】:Using Web API by Generating Entity Framework scaffolding API Controller Error通过生成实体框架脚手架 API 控制器错误来使用 Web API
【发布时间】:2013-11-10 05:19:15
【问题描述】:

我有捕鸟模型:

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 控制器来使用 Web Api 时,它不起作用。 错误如下:

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

谁能帮我解决这个问题?

【问题讨论】:

  • 问题可能是序列化器,你需要禁用它。

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


【解决方案1】:

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

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;

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多