6

好的,所以根据这个页面Select,实体框架应该通过在Include方法中使用 a 来急切地加载多个级别。

我有以下代码:

var reports = _context.Reports
    .Include(rt => rt.Fields)
    .Include(rt => rt.Fields.Select(f => f.FieldType))
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier));

然而,这会InvalidOperationException在调用第二个包含时引发“无效的表达式类型”。异常来自EntityFrameworkHelper.CollectRelationalMemebers.

我也尝试过对Include相关属性使用字符串,但这也失败了(如果可能的话,我宁愿避免使用字符串)。

我正在使用 .NET 4.0 的 EF 5.0 DLL。我的 EF 类是老式的 database-first EntityObject

有谁知道原因,如果我能对这个异常做些什么?

编辑:

使用字符串版本时:

var reports = _context.Reports
    .Include("Fields")
    .Include("Fields.FieldType")
    .Include("Fields.FieldType.FieldIdentifier"));

它抛出InvalidOperationException- 表达式类型无效。

4

2 回答 2

20

您有多余的包含。您只需要最后一个包含,它将包含该路径中的任何内容。例子:

var reports = _context.Reports
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier));
于 2013-02-20T20:44:35.323 回答
0

问题最终是Include我们使用的 DLL 中的第 3 方扩展方法优先于实体框架的Include. 第 3 方正在抛出异常。删除后问题就解决了。

扩展方法的问题之一......

感谢大家的帮助。

于 2013-02-20T21:14:55.340 回答