3

LINQ to SQL を使用して、SQL Server 2012 データベースの一連のテーブルからデータを取得しています。クエリの結果は正しく、ドメイン オブジェクトが正しく構築されています。ただし、生成された SQL を (DataContext.Log または SQLProfiler を介して) 調べると、クエリは非常に簡潔に見えます。

最も注目すべきは、私のインスタンスの多くが、1 つの特定のテーブルの行からのデータによって構築されていることです。上記のテーブルと1対多の関係を持つテーブルによる外部キーを介してこのテーブルにアクセスしていますが、このテーブルはSQLクエリのどこにも表示されません! FROM や JOIN ステートメントなどにはありません。

生成されたクエリが正確かつ迅速に実行されることは確かにうれしいのですが、生成された SQL のどこにも記載されていないテーブルからデータがどのように取得されるのか理解できません。何が起こっているのか理解したいです。

何か案は?

4

1 に答える 1

4

これはおそらく、読み込みの遅延が原因です。

ドメインオブジェクトをロードする場合、依存するドメインオブジェクトは、明示的にアクセスするまでロードされません。

MSDNから:

オブジェクトを照会すると、実際には要求したオブジェクトのみが取得されます。関連するオブジェクトが同時に自動的にフェッチされることはありません。...関連するオブジェクトにアクセスしようとすると、それらを取得するリクエストが生成されるため、関連するオブジェクトがまだロードされていないという事実を確認することはできません

遅延読み込みの詳細については、こちらこちらをご覧ください。

于 2012-08-16T13:56:50.663 に答える