【问题标题】:EF4/Linq Eager Loading with Include fails to populate all resultsEF4/Linq Eager Loading with Include 无法填充所有结果
【发布时间】:2010-08-25 15:33:44
【问题描述】:

我正在尝试将 EF4 作为 .Net 4.0 WCF 服务的一部分。该服务的目的是将文档数据作为实体对象数组返回给我们的任何 ASP.Net 应用程序。这些应用程序仍在 .Net 2.0 中。由于解决方案的性质,我在上下文级别禁用了 LazyLoading。我从这个开始:

var revQuery = from revs in context.tbl_Document_Revision
                       where (revs.ID == myIDVar)
                       select revs;

一切正常,我收到了正确数量的填充对象。但是,当我在查询中添加一个 Include 以允许我们从具有已定义导航的相关表中提取字段时,只有第一条记录会完全填充到调用应用程序中:

var revQuery = from revs in context.tbl_Document_Revision.Include("tbl_Staff")
                       where (revs.ID == myIDVar)
                       select revs;

数组的大小正确,但第一个元素之后的所有元素都是空白的默认占位符。就像使用 Include 已经恢复到 LazyLoading 一样,我似乎无法将它踢到线上。其他人有这个问题吗?

【问题讨论】:

  • 您能否发布显示 DocRevision 和 StaffNames 实体的 EDMX 图片段。为什么奇怪的复数? 'StaffNames' 是正确的名称吗?顺便说一句,网络上有一些“.Include”的强类型版本可以提供帮助。您如何将数据投影到阵列的正确“形状”?您也可以显示该代码吗?
  • 它们都是真实对象名称的变体,所以我只使用想到的任何东西。我只是使用 revQuery.ToArray();退回它。作为一些背景知识,我一直在采用简单的方法,因为我直接从 .Net 2 中跳出来,我们是一个没有 Linq 等经验的小团队。我会调查 EDMX,恐怕需要管理层批准。
  • 抱歉,StackOverflow 不允许我添加图片,因为我对网站太陌生了。
  • 这仍然是一个问题,因此我们已经停止使用 EF4/Linq 进行此操作,并且现在不得不将其替换为 DataTables 和 SQL 存储过程,因为此解决方案是我/我们的舒适区。我将继续关注这个问题,以防万一有人能提供帮助。

标签: linq-to-entities include entity-framework-4 lazy-loading eager-loading


【解决方案1】:

尝试显式加载属性,而不是使用 include 方法。无法告诉您为什么 include 方法不起作用。

    var revQuery = from revs in context.tbl_Document_Revision
                   where (revs.ID == myIDVar)
                   select revs;
    foreach(var rev in revQuery)
    {
    context.LoadProperty(rev, "tbl_staff");
    }

要尝试的另一件事是使用 lamda 代替查询语法,看看是否有帮助。

    var revQuery = context.tblDocument_Revision.Include("tbl_staff")
    .Where( tbl => tbl.ID == myIDVar)

【讨论】:

  • 杰克,谢谢你的建议,很遗憾他们没有解决这个问题。但是他们确实指出了我在下面添加的可能原因。
【解决方案2】:

在回到这个问题来尝试 Jack 的建议时,我找到了一个可能的答案。当我遇到最初的问题时,我仍在开发中,并在我的开发 PC 上托管服务和应用程序。在解决它之后,我部署了 WCF 服务的测试版本。

当我去测试上面建议的更改时,我的应用程序仍然指向有效的服务测试实例(与去年相比没有变化)!因此,只有当您在同一台机器上拥有服务和调用应用程序时,才会出现问题。我会把原因留给更聪明的人! :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2019-10-20
    • 2019-11-26
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多