読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Entity Framework で一括読み込みを行う方法

Entity Framework

以前 Entity Framework ではリレーションシップの参照が自動で読み込まれず、明示的に EntityReference.Load メソッドを呼び出してやらないと書きましたが、一括で読み込む方法があったみたいです。

LINQ クエリの Orders エンティティで呼び出される Include メソッドは、Orders と共に関連する Customers も取得するように指示する 1 つの引数を受け取ります。この方法では、LINQ クエリ内の条件を満たすすべての Orders および Customers を読み込む単独の SQL ステートメントが生成されます。

using (Entities entities = new Entities())
{
  var query = (from o in entities.Orders.Include("Customers")
               where o.ShipCountry == "USA"
               select o);

  foreach (Orders order in query)
    Console.WriteLine(order.OrderID + " --- " + 
      order.Customers.CompanyName);
}
データ ポイント: Entity Framework に関する Q&A

LINQ to SQL と違って遅延読み込みに対応していないので、クエリ式の時点で読み込みを指定してあげないと駄目みたいです。最初から必要とわかっている場合は、こっちの方法のが効率のよいクエリが生成されるような気がしなくとも無いですが。