0

所有者とクライアントの 2 つのテーブルがあり、1 対多の関連付けがあります。エンティティの学習を微調整しようとして、問題が発生しました。一日中、運が悪かったので、次の 2 つの同様のコード行が異なる値を返すことを推論しようとしました。

テストのみを目的としており、所有者ごとにクライアントを合計しようとしています。Owners エンティティには、Client オブジェクトのコレクションを返す Clients ナビゲーションがあります。結果に Owners エンティティを含めたいと思います。これには Clients エンティティが含まれます。

クライアントの総数を返すこれら 3 つの方法が異なる理由を知りたいです。1 番目と 2 番目はゼロのクライアントを返し、3 番目は正しい合計クライアント数を返します。

0 クライアントを返します:

Owner owner = context.Owners.First(o => o.ownerID == 5);
var clients = owner.Clients.Count();

-

Owner owner = context.Owners.Where(o => o.ownerID == 5).FirstOrDefault();
var clients = owner.Clients.Count();

正しいカウントを返します

var clients = context.Owners.Where(o => o.ownerID == 5).Select(o => o.Clients.Count()).FirstOrDefault();

なぜ物事がそんなに違うのか説明を見つけたいと思っています。

ありがとうございました

4

1 に答える 1

0

Pawel が言うように、これは遅延読み込みに関連しているに違いありません。の不在、つまり。Ownerクラスが独自のコレクションを作成すると仮定しますClients(コンストラクターで)、それ以外の場合はnullになります。

ここで、コレクションを仮想として定義するとClients(コード ファーストで作業すると仮定して)、アドレス指定時に EF がコレクションを遅延読み込みできるようになりますowner.Clients.Count()

于 2012-10-21T11:01:57.420 に答える