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

Roy*_*Roy 8 .net orm entity-framework

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

Cra*_*ntz 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);
Run Code Online (Sandbox Code Playgroud)


Cha*_*lie 5

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

添加关联窗口http://i45.tinypic.com/xmoqcp.jpg

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

  • 在3.5 SP1中,您无法使用设计器删除导航属性,您必须从EDMX文件中的XML的ConceptualModel部分中删除它们.不过我认为克雷格的答案要好得多.您不一定要更改模型来解决序列化问题.通过更改模型,您可以做很多事情. (2认同)

Asm*_*sen 5

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