我已经在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中修复,但我没有测试开发人员预览,看它是否有效。
答案 0 :(得分:3)
可能修复了最新的.net 4.5 https://connect.microsoft.com/VisualStudio/feedback/details/640423/entity-framework-include-strings-are-arbitrarily-limited-to-a-path-of-depth-8#tabs
答案 1 :(得分:1)
我还没有看到这个,但这里有两种可能的解决方法:
循环浏览数据,并为每一行使用加载。请注意,这将为每行创建对数据库的调用,因此速度非常慢。
在视图中展平数据,然后从视图中选择。这会产生大量冗余数据,因此会占用更多内存和网络。