13

私は先週ブロゴスフィアで、Linq to SQL が死んでいる [そして EF と Linq to Entities が長生きしている] ことを読んでいました。しかし、MSDN の概要を読んだとき、Linq to SQL が SQL クエリを生成するのとまったく同じように、Linq to Entities が eSQL を生成するように思えました。

現在、基礎となる実装 (および SQL Server はまだ ODBMS ではないため) は依然としてリレーショナル ストアであるため、エンティティ フレームワークは、ある時点で SQL クエリへの変換を行う必要があります。Linq to SQL の問題 (m:m 関係、SQL サーバーのみのサポートなど) を修正し、これらのクエリを生成するレイヤーとして Linq to SQL を使用しないのはなぜですか?

これはパフォーマンスのためですか、それとも EF は eSQL ステートメントを SQL に変換する別の方法を使用していますか?

少なくとも私の未熟な心にとっては、EF でのドッグフード Linq to SQL に自然に適合するように思えました。

コメント?

4

3 に答える 3

15

Entity Framework には (少なくとも) 3 つの消費方法があることに注意してください。

  • エンティティ クライアントを介したオブジェクト サービスを介したエンティティへの LINQ
  • Entity Client を介したオブジェクト サービスを介した Entity SQL
  • Entity Client コマンド オブジェクトを使用した Entity SQL (従来の ADO.NET に最も類似)

Entity Client は最終的に、特定の RDBMS の ADO.NET プロバイダーがストア固有の SQL に変換する役割を担う ESQL コマンドの表現を (正規の、データベースに依存しない形式で) 吐き出します。これは、各ストアの優れた ADO.NET プロバイダーを作成するために長年にわたって多くの時間が投資されてきた (そして今後も投資される予定である) ため、適切なモデルです。

Entity Framework は多くのストア、したがって多くの ADO.NET プロバイダーと連携する必要があるため、Entity Client がストアごとに生成するものを簡単に最適化する範囲が狭くなっています (少なくとも、v1 の場合)。LINQ to SQL チームは、解決すべきはるかに小さな問題を抱えていました。「SQL Server でのみ動作する」ため、ストア固有のものをより簡単に実行できました。EF チームは、EF to SQL Server が L2S よりも効率的に TSQL を生成しない場合があることを認識しており、V2 でこれを改善するために取り組んでいます。

興味深いことに、このモデルでは、ストアのエンティティ クライアントと ADO.NET プロバイダーの間に新しい機能を追加できます。これらの「ラッピング プロバイダー」は、ロギング、監査、セキュリティ、キャッシングなどのサービスを追加できます。これは、 http://blogs.msdn.com/efdesign/archive/2008/07/09/transparent-caching-support-in-the-entity-framework.aspxで V2 機能として説明されています。

そのための全体像を見ると、L2S TSQL 生成を Entity Framework のアーキテクチャに何らかの形で後付けしようとすることは、非常に困難であり、実際には制限的であることがわかります。

于 2008-11-05T13:20:55.440 に答える
5

実際、EF は LINQ クエリを変換するときに EntitySQL を生成しません。EF には、CQT または正規クエリ ツリーと呼ばれるすべてのクエリのデータ構造ベースの表現があります。LINQ トランスレーターと EntitySQL パーサーの両方が CQT を生成し、残りのクエリ変換パイプラインは CQT (およびその他の内部中間形式) を使用します。これは、さまざまな変換の後、ADO.NET プロバイダーに (ストアレベルの CQT として) 送信されます。次に、それをバックエンドの SQL ダイアレクトに変換します。したがって、パスは LINQ -> CQT -> SQL または EntitySQL -> CQT -> SQL です。

于 2010-03-30T06:56:09.493 に答える
1

Linq to SQL と Entity Framework の大きな違いは、EF が Entity Data Model 仕様 (EDM) を実装していることと、ADO.NET Data Services (別名 Astoria) など、EDM を中心に構築された他の製品があることです。

現在 EDM は、REST 上で CRUD を標準化するために使用される Open Data Protocol (OData http://odata.org/ )と呼ばれる新しい仕様で AtomPub を拡張するために使用されています。

于 2009-11-18T19:36:02.027 に答える