【问题标题】:Entity Framework .Include does not support paths with more than 8 dot-separated namesEntity Framework .Include 不支持超过 8 个点分隔名称的路径
【发布时间】:2011-03-10 16:47:03
【问题描述】:

我为此在 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 的代码(带有 Reflector),似乎他们在其中硬编码了幻数 8...

更新:微软的回应:

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

更新 2:尽管上面引用了 Microsoft 的回应,但该错误没有在 EF 4.1 中修复

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

【问题讨论】:

  • 这是预期的,因为 4.1 不是下一个版本。它只是 4.0 的包装器,不会改变现有程序集中的任何内容。

标签: entity-framework include-path


【解决方案1】:
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢,但不幸的是,这两种解决方法都不够好......我希望微软能够真正修复这个错误(或解释它),或者至少是一个不需要摆弄的解决方法数据库或滥用性能。
猜你喜欢
  • 2021-04-23
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 2011-06-18
  • 2018-02-28
  • 2014-10-04
相关资源
最近更新 更多