2011-07-11 25 views
0

現時点では、私は自分のウェブサイトの非常に大きなデータベースモデルに取り組んでいます。私はLinq-to-entitiesを使ってデータベースと会話しています。私が文脈からオブジェクトを得るたびに、この問題が発生します。Linq to Entities - エンドレスエンティティループ

  • エンティティ "BookReader"には、読んだすべての書籍のリストがあります。しかし、エンティティ "Book"には、その本を読んだすべての読者のリストもあります。今度は、私のdatacontextがデバッグモードでbookreaderエンティティを返して、彼が読んだ本のリストの中を見ると、そこにあるすべての読者と読んでいる本を見る​​こともできます。

私のデータベース全体がメモリにロードされるという無限ループのように見えます。私はこれを考えて間違っているのですか、それとも実際にパフォーマンス上の問題を引き起こしていますか?

+0

lazyloadingが有効な限り問題はありません。 – Joakim

答えて

2

私はそうは思わない。あなたやあなたのコードが指示するまで、EFは関連するエンティティをロードしません。あなたは、デバッガでそれを参照していることを述べました。これは、親エンティティ関連のコレクションを開くことによって、関連するエンティティの遅延読み込みをトリガーしたことを意味します。これは、初めてアクセスしようとし、アクセスとしてデバッガの数でエンティティを参照するまでです。 SQLプロファイラでチェックすることができます。

+0

あなたの答えLadislavに感謝します。私はそれがこのように動作すると思ったが、確かめる必要があった。私はSQLプロファイラを使ったことはありませんが、私のコンピュータにインストールされており、試してみることができます。 – Julian

0

Linq-to-anythingは決してそれらのクエリを決して解決しません。

デバッガの変数を見ると、子コレクションのいずれかで「クリックして展開」が表示されます。これらをクリックして、データベースクエリが実際に実行されるだけです。

データベースをデバッガにロードする唯一の方法は、すべてのコレクションを見つけてウォッチウィンドウで手動で展開することです。

+0

ありがとうアンドリュー!それはLadislavが言ったことと同じことだと私は多くを助けます。 – Julian