1

我有打鸟模型:

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]'

谁能帮我解决问题?

4

1 回答 1

3

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

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;

希望能帮助到你。

于 2013-11-09T21:19:15.753 回答