实体框架渴望加载多个级别异常

时间:2013-02-20 19:19:02

标签: c# .net entity-framework entity-framework-5

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

我有以下代码:

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));

然而,在调用第二个include时,会抛出InvalidOperationException - “无效的表达式”。例外来自EntityFrameworkHelper.CollectRelationalMemebers

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

我正在使用适用于.NET 4.0的EF 5.0 DLL。我的EF类是老式的数据库优先EntityObject s。

有没有人知道原因,以及我可以对此例外做些什么吗?

编辑:

使用字符串版本时:

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

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

2 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:0)

问题最终是我们使用的DLL中的第三方Include扩展方法优先于实体框架的Include。第三方是抛出异常。删除后问题得到解决。

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

感谢大家的帮助。