序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用

序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用

entity famework+asp.net mvc 做code first项目的时候,前台ajax请求到后台 JsonResult

在后台返回  return Json(list, JsonRequestBehavior.AllowGet)的时候,出错:

序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用。

解决方法:

  1.可以在查询的时候这样子

var list = from f in db.Categories
//这里要select new
select new
{
Id = f.Id,
Name = f.Name,

};

2.你可以尝试删除所有导航属性virtual关键字禁用延迟加载创建代理,然后使用预先加载,而不是显式地加载所需的对象图

public ActionResult GetAll()
{
return Json(Context.Categories
.Include(o => o.Products)
,
JsonRequestBehavior.AllowGet);
}

看起来像是依赖于延迟加载无论如何,因为你使用virtual属性延迟加载对象图,可能会造成现在的系列化的麻烦
3.没有必要删除virtual关键字导航性能(这将使延迟加载模型完全不可能这足以创建代理以及禁用延迟加载禁用代理扰乱序列一样具体情况

Context.Configuration.ProxyCreationEnabled = false;

这将禁用仅适用于特定上下文实例Context创建代理

posted @ 2012-03-31 15:51  Xia.CJ  阅读(5575)  评论(0编辑  收藏  举报