如何删除实体框架中的循环引用?

时间:2010-01-21 07:25:06

标签: .net entity-framework orm

我的客户和订单实体之间的循环引用在序列化期间导致异常。有没有办法强制EF在这两个实体之间生成单向引用?提前谢谢!

6 个答案:

答案 0 :(得分:13)

当我需要序列化时,我通常会投射到其他类型。这消除了循环引用,以及我不想序列化的其他数据。例如:

var q = (from c in Repository.Customers()
         where c.Id == id
         select new 
         {
             Name = c.Name,
             Orders = from o in C.Orders
                      select new
                      {
                          Date = o.Date
                      }
         }).First();
return Json(q);

答案 1 :(得分:5)

在模型设计器中创建关联时(右键单击add-> association),您将看到一个如下所示的弹出窗口:

Add association window http://i45.tinypic.com/xmoqcp.jpg

请注意导航属性复选框,如果不希望生成它们,可以取消选中它们。要解决循环引用问题,请确保只选中一个或不选中,而不是两个。

答案 2 :(得分:5)

我已经在EF 3.5中解决了这个问题,将Child的导航属性Getter从public更改为Internal。

答案 3 :(得分:1)

在服务器级别上:

[DataContract(IsReference = true)] 

MSDN

答案 4 :(得分:0)

观看此页面 我希望我能为生存而努力 http://msdn.microsoft.com/en-us/data/jj574232.aspx

答案 5 :(得分:0)

使用Web API v2下的有权框架v5 / v6,为子导航更改内部的getter工作