EF4 / Linq Eager正在加载包含无法填充所有结果

时间:2010-08-25 15:33:45

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

我正在尝试将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,我似乎无法将它排成一行。其他人有这个问题吗?

2 个答案:

答案 0 :(得分:0)

尝试显式加载属性,而不是使用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)

答案 1 :(得分:0)

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

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