3

为此,我在 Microsoft Connect 上打开了一个错误,但很长一段时间都没有回复请参阅下面的编辑以了解他们的回复)。所以这里是:

当尝试使用 linq 查询中的“包含”函数请求实体框架及其关系时,不可能通过超过 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 的代码(带有反射器),似乎他们在那里硬编码了幻数 8 ......

更新:微软的回应:

感谢您提出这个问题。我们计划在下一个版本中取消包含路径中元素数量的限制。

更新 2:尽管上面引用了微软的回应,但该错误在 EF 4.1中并未修复

更新 3:根据微软的说法,应该在 .NET 4.5 中修复,但我没有测试开发者预览版是否有效。

4

2 回答 2

1

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

  • 循环遍历数据并对每一行使用Load。请注意,这将为每一行创建一个对数据库的调用,所以它真的很慢。

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

于 2011-03-12T20:04:12.450 回答