これについて 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 がハードコーディングされているようです...
更新: Microsoft の応答:
この問題を提起していただきありがとうございます。次のリリースでは、インクルード パスの要素数の制限をなくす予定です。
更新 2 : 上記の Microsoft の回答にもかかわらず、バグはEF 4.1 で修正されませんでした
更新 3 : Microsoft によると、.NET 4.5 で修正する必要がありますが、開発者プレビューをテストして動作するかどうかを確認しませんでした。