2つのコードを比較します。最初のコードはLINQ to SQLを使用して記述されています。
L2SDataContext linqToSqlContext = new L2SDataContext();
this .MyDataGrid1.DataSource = linqToSqlContext.Customers.First()。Orders;
this .MyDataGrid1.DataBind(); *このソースコードは、 ソースコードハイライターで強調表示されました。
このコードの結果、3つのレコードがDataGridに表示されます。
次のコードは、EntityFrameworkを使用して記述されています。
EFEntities entityFrameworkContext = new EFEntities();
this .MyDataGrid2.DataSource = entityFrameworkContext.Customers.First()。Orders;
this .MyDataGrid2.DataBind(); *このソースコードは、 ソースコードハイライターで強調表示されました。
ご覧のとおり、コードの構造はほぼ同じです。 ただし、同時に、DataGridには単一のレコードは表示されません。 ここで問題は何ですか?
遅延読み込み
遅延読み込みは、Linq to Sqlで利用可能な手法であり、Customersの最初の例で関連するOrderレコードを密かに読み込みます。 Entity Frameworkには遅延読み込みはありません。 この点については、EF開発チームから説明があります。「より大きなプロジェクトを設計するとき、開発者はいつ開発するかを明確に理解することが非常に重要です。データベースなどの特定のリソースにアクセスしています)。 言い換えれば、EFは開発者にデータベースから何をいつダウンロードするかを自分で決定するように勧めます。 そして、これは次のように行われます。
this .MyDataGrid2.DataSource = entityFrameworkContext.Customers
.Include( "Orders" ).First()。注文; *このソースコードは、 ソースコードハイライターで強調表示されました。
別の方法は、データを明示的にロードすることです:
var customer = entityFrameworkContext.Customers.First();
customer.Orders.Load();
this .MyDataGrid2.DataSource = customer.Orders; *このソースコードは、 ソースコードハイライターで強調表示されました。
遅延読み込みは確かに有用なものであり、多くの時間を節約します。そのため、この記事の著者は、この手法をEFに「戻す」方法の簡単な例を示します。 この例は、自動的に生成されたコードの編集に基づいているため、最も要求されません。
遅延読み込みの欠如は、おそらくEFの主な違いの1つです。 これは、LinqからSqlに移行するときに留意すべき非常に重要なポイントです。
元の記事「Entity Framework and Lazy Loading」はここで読むことができます:
www.singingeels.com/Articles/Entity_Framework_and_Lazy_Loading.aspx