【问题标题】:Many To Many Query In EF Keeps Returnning Empty ResultsEF 中的多对多查询不断返回空结果
【发布时间】:2011-03-11 20:13:41
【问题描述】:

我正在使用带有 POCO 的 EF 4,并且禁用了延迟加载和代理创建(由于序列化要求)。我有两个使用第三个交叉引用表具有多对多关系的表。在 EF 中,不存在交叉引用实体,并且我在实体关系的两侧都有一对多的导航属性(如预期的那样)。

但是,当我使用通过 SQL 管理器查询确认的实体之一的导航属性来获取数据时,我得到一个空结果集。

还有其他人遇到过这种情况吗?如果是这样,任何有关如何解决的建议将不胜感激。

谢谢!

【问题讨论】:

  • 能否请您出示您的 LINQ 查询。谢谢。

标签: .net entity-framework-4 poco


【解决方案1】:

您需要使用LoadPropertyInclude 方法。

           Order order = EFContext.Orders.Include("Lines")
                         .Where(m => m.OrderID == orderId).First();

更多来自 [MSDN] “因为POCO实体与继承自EntityObject的对象没有相同的关系需求,所以加载相关对象需要稍微不同的流程”

【讨论】:

  • 我认为您的意思是,由于他禁用了代理创建,我认为他可能启用了延迟加载。这就是让他感到困惑的地方。
  • 我禁用了延迟加载和代理创建。
  • 然后我收回我对 alliswell 的更正,他是对的。如果您关闭了 LazyLoading,则需要在 LINQ 查询中(使用 .Include)或使用 LoadProperty 显式加载导航属性。
  • 如果您使用 PURE POCO,那么 Include 或 Loadproperty 将起作用。尝试使用它们,但由于您禁用了代理创建,因此您必须手动跟踪更改。
【解决方案2】:

您不能禁用代理创建,也不能使用延迟加载。 (请参阅 POCO 是否支持延迟(延迟)加载?@http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx)。

代理是延迟加载工作的原因。该链接(上图)还演示了如何快速加载相关类型,如果您关闭代理创建,您会想要这样做。

【讨论】:

  • 我禁用了延迟加载和代理创建。
猜你喜欢
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2010-09-25
  • 2020-10-23
  • 2020-11-25
相关资源
最近更新 更多