实体框架.Include不支持具有8个以点分隔的名称的路径

时间:2011-03-10 16:47:04

标签: entity-framework include-path

我已经在Microsoft Connect上打开了一个错误,但很长一段时间内没有响应请参见下面的编辑)。所以这就是:

当尝试使用linq查询中的“Include”函数请求具有其关系的实体框架时,不可能通过超过8个步骤的路径请求关系(路径中的8个点字符)。这使我无法完成一些需要访问超过该重定向级别的动态生成的查询。

我没有成功完成查询,而是获得以下异常:

"Foo.Bar.Baz...(some more path string here)", the current limit of "8" is insufficient.

at System.Data.Common.MultipartIdentifier.IncrementStringCount(String name, String[] ary, Int32& position, String property)
at System.Data.Common.MultipartIdentifier.ParseMultipartIdentifier(String name, String leftQuote, String rightQuote, Char separator, Int32 limit, Boolean removequotes, String property, Boolean ThrowOnEmptyMultipartName)
at System.Data.Objects.Span.ParsePath(String path)
at System.Data.Objects.Span.Include(String path)
at System.Data.Objects.Span.IncludeIn(Span spanToIncludeIn, String pathToInclude) 

有没有人想出为什么会这样,或者解决这个问题?看看ParsePath的代码(使用Reflector),似乎他们在那里硬编码了神奇的数字8 ......

更新:微软的回复:

  

感谢您提出此问题。我们计划在下一版本中删除Include路径中元素数量的限制。

更新2 :尽管上面引用了微软的回复,但错误是 修复了

更新3 :据微软称,应该在.NET 4.5中修复,但我没有测试开发人员预览,看它是否有效。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

我还没有看到这个,但这里有两种可能的解决方法:

  • 循环浏览数据,并为每一行使用加载。请注意,这将为每行创建对数据库的调用,因此速度非常慢。

  • 在视图中展平数据,然后从视图中选择。这会产生大量冗余数据,因此会占用更多内存和网络。