我有捕鸟模型:
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/