私はLazyローディングの動作について混乱しています。Entityフレームワーク、ToList()を呼び出すと、FKオブジェクトが自動的に読み込まれますか?
public class Supplier
{
public int ID { get; set; }
[Required]
public string FullName { get; set; }
public string TaxNumber { get; set; }
public virtual Address DeliveryAddress { get; set; }
}
私がブレークポイントを置くとき:
var suppliers = dbContext.Supplier.ToList();
私はそれを見ることができ、私はこのように、プロパティとして住所異物を持つサプライヤオブジェクトを、持っている場合たとえば
アドレス情報は、varAddressプロパティを使い切ったときにvarサプライヤなどが利用できます。使用可能です。すべてのFKオブジェクトがロードされたことを意味しますか?しかし一方で、右手のクエリのために私は、ブレークポイントでのVisual Studioからそれを見ることができ、そしてそれはそのようなものです:自身がロードするために抱き合わせではないでしょうクエリを意味
{SELECT
[Extent1].[ID] AS [ID],
[Extent1].[FullName] AS [FullName],
[Extent1].[TaxNumber] AS [TaxNumber],
[Extent1].[DeliveryAddress_ID] AS [DeliveryAddress_ID]
FROM [dbo].[Suppliers] AS [Extent1]}
アドレスオブジェクトはまったくですか?
誰がFKオブジェクトをロードしていますか? ToList()またはVSデバッガ?
レイジーローディングであるかどうかを確認する方法に関するその他の提案はありますか?
注:これで、Lazyローディングは2つのToListコール、1つはレイジーローディング、もう1つはレイジーローディングで動作することが確認されました。誰かが、FKプロパティのために別のクエリを読み込み中に遅延が発生したときに、どの時点で何を知る方法を教えてもらえますか?
DeliveryAddressが既に読み込まれているかどうかはどうですか?データベースに1つのクエリしか送信されていないと確信していますか? SQLプロファイラを起動して、どのクエリがdbに送信されるかを正確に確認できます。 – danludwig
こんにちは、私はどのようにSQLプロファイラを起動できますか? SQL Server 2008 R2を使用していますが、SQLプロファイラのメニューが表示されないようです。私は見ることができます:インポートとエクスポート、サーバー管理スタジオ、構成ツール、統合サービス? –