1

ご感想ありがとうございます

私はエンティティ フレームワーク 5.0、モデルを最初に使用しています。

テーブルは、クラスごとのテーブル (または具象型ごとのテーブル) パターンを使用してマップされます。

表 A 1..多数 (抽象) 表 B

テーブル B には 2 つの子クラスがあります

B1 & B2

B2 には 3 番目のテーブルへの外部キーがあります。たとえば、テーブル C (多くの B2 ... 1 C) としますが、これは親クラス B のプロパティではありません。

Eager ローディングはアプリケーションのデフォルトであり、テーブル B2 でクエリを実行するときにテーブル (またはコレクション) C を含めたいと考えています。

from A in _db.A
.Include(A=>A.B.OfType<B2>())
.Include(A=>A.B.OfType<B2>().Include(C))
select A

このテーブルの熱心なロードを強制する方法について考えてくれてありがとう

4

1 に答える 1

2

問題の核心は、Include(A=>A.B.OfType<B2>())サポートされていないことです。

私が理解する限り、ADO.Net チームは、部分的に読み込まれた子コレクションをサポートしたくないようです。(そして、私はそれらに同意する傾向があります。) Linq-to-sql にはDataLoadOptionsがありましたが、それらに相当する EF はありません。IncludewithOfTypeがサポートされていない理由を説明できます。これは、EF にBs のコレクションを部分的にロードするように指示するためです。

さらに、拡張メソッドは、オブジェクト自体Includeの Include メソッド (存在する場合) の単なるラッパーです。IQueryableTake :含まれるナビゲーション プロパティへのパスを含むObjectQuery.Includeパラメーター ( と同じ) として文字列のみを持つ非常に単純なメソッド( )。つまり、MemberExpression に解決できる文字列のみを使用できます。そしてメソッドです。DbQuery.Include_db.A.Include("B")B.OfType<>()

を含めることができない理由を説明する長い話C: へのパスCが有効ではありません。

あなたができる

_db.B.OfType<B2>().Include(b => b.A).Include(b => b.C)

しかし、それはあなたが求めていた結果をあなたに与えないかもしれません.

于 2012-10-07T21:54:56.557 に答える