【发布时间】:2018-11-24 18:55:17
【问题描述】:
考虑一个包含Order 和OrderLines 表以及它们之间的一对多关系的数据库(这是针对MCVE;实际上下文更复杂)。如果我为模型搭建脚手架,我会得到以下信息:
public partial class Order {
public virtual ICollection<OrderLines> OrderLines {get; set;}
}
和
public partial class OrderLines {
public virtual int OrderId {get; set;}
public virtual Order Order {get; set;}
}
现在,如果我生成 OrdersController,GET 方法也很简单:
[HttpGet]
public ActionResult<IEnumerable<Order>> Order() {
return _context.Order.ToList();
}
我得到一个不错的 JSON 字符串作为回报。但是,如果我像这样将 Include() 添加到 get 方法中:
return _context.Order.Include(o => o.OrderLines).ToList();
生成的字符串在中间被剪切。当我调试时,似乎程序进入了从 OrderLines 到 Order 再回到 OrderLines 的无限循环。如果我从OrderLines 中删除Order 变量并只留下OrderId,一切正常(这支持了我关于无限循环的假设)。
显然,这是一个有些原始的例子;我应该使用 ViewModel - 但是,上面的代码不应该是有效的吗?我已经多年没有使用 Include(),但我很确定在早期版本的 EF 中它工作正常。
获取对象及其子集合的推荐方法是什么?
【问题讨论】:
-
从不返回实体框架查询,总是先实现
-
抱歉 - 我在剪切和粘贴过程中错过了
ToList()。更新 -
@CamiloTerevinto - 我正在使用各种关键字进行谷歌搜索,但您提到的问题从未出现过。另外,由于某种原因,我没有收到任何错误。所以,虽然我同意这个问题提供了正确的答案,但我建议保持我的问题开放...... :)
-
关于重复的问题,答案存在于其他几个问题中,但是,问题来自不同的角度。许多人被困在这个阶段,我没有看到有这个问题的人找到了解决方案
-
确实问题是一样的。上述问题是您面临问题的常见情况。该场景无法真正与问题联系起来。第一次也花了我一段时间。以这种格式提出问题是有道理的,以帮助其他人更快地找到解决方案
标签: c# asp.net-core entity-framework-core