asp.net:Entity Framework、LINQとSqlの違いの1つ

この記事では、Entity Frameworkに関する一連の記事を開きたいと思います。 将来的には、EFを使用するプロセスでの経験の結果を投稿する予定ですが、今のところは「LINQ to SQLとEntity Frameworkの違い」というトピックに関する興味深い記事を無料で提供します。



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



All Articles