0

POCO エンティティで使用Includeすると、包含パスを設定した場所に関係なく、すべての単一パスが含まれているように見えます。

たとえば、次の 3 つのテーブルがあるとします。

USER
-----
Id
Name

AUTHOR
-----
Id
Name
LastEditUserId

BOOK
-----
Id
Name
AuthorId
LastEditUserId

Book関連するAuthorとそのを含むすべての を取得したいとしますUser。つまり、私は興味がありませんBook.User。したがって、包含は次のようになります。

var books = db.Book;
books.Include(b => b.Author.User);

しかし、返されたオブジェクトには、Author関連する とそれ自体に関連する の両方が含まれますが、これは私が求めていませんでした。UserUserBook

一般的に、クラス全体ではなく、選択したパスのみを含める方法はありますか?

4

1 に答える 1

1

たとえば、与えられBookた keyがあるとします1。この本はAuthor=2その両方 に関係があり、 =Book.UserBook.Author.User参照しています。その後、クエリを実行すると...User3

var book1 = db.Books.Include(b => b.Author.User).Single(b => b.Id == 1);

...EF は、ブック 1、著者 2、ユーザー 3 など、要求されたものを正確に読み込み、3 つのエンティティすべてがコンテキストに関連付けられます。3外部キーは常に読み込まれるため、EF はブックからユーザー (これは ) に外部キーを直接読み込みます。エンティティがコンテキストに読み込まれると、Userキーを持つエンティティがアタッチされていることが検出され、外部キーも同様であるため3、ナビゲーション プロパティに自動的に割り当てられます。この手順は、関係修正と呼ばれます。実際には明示的な要求のみに基づいて実行される SQL クエリに関するオーバーヘッドはありません。この動作を無効にすることはできません。Book.User3Include

Book.User別のユーザーを参照する場合、Book.Author.Userナビゲーション プロパティBook.Userは残りますnull(参照しているエンティティが、Book.User以前のクエリまたは手動のアタッチによって既にコンテキストにアタッチされている場合を除きます)。

于 2013-09-12T16:04:15.053 に答える