Entity Framework VS LINQ to SQL VS ストアド プロシージャ付き ADO.NET? [closed] 質問する

Entity Framework VS LINQ to SQL VS ストアド プロシージャ付き ADO.NET? [closed] 質問する

それぞれについて、以下の点からどのように評価しますか。

  1. パフォーマンス
  2. 開発のスピード
  3. すっきりとしていて、直感的で、保守しやすいコード
  4. 柔軟性
  5. 全体

私は SQL が好きで、常に ADO.NET とストアド プロシージャの熱烈なファンでしたが、最近 Linq to SQL を試してみたところ、データ アクセス レイヤーをいかに早く書き出せるかに驚き、Linq to SQL または EF のどちらかを本当に理解するために時間を費やすことにしました... あるいはどちらも理解しないのでしょうか?

これらのテクノロジーに、私の研究時間を無駄にしてしまうような大きな欠陥がないかどうかを確認したいだけです。たとえば、パフォーマンスがひどく、シンプルなアプリには最適ですが、限界があります。

更新: ORM VS SP ではなく、EF VS L2S VS SP に焦点を当てていただけますか。私は主に EF VS L2S に興味があります。しかし、プレーン SQL についてはよく知っているので、それらをストアド プロシージャと比較することも楽しみにしています。

ベストアンサー1

まず、新しいプロジェクトを開始する場合は、Entity Framework (「EF」) を使用してください。これは、Linq to SQL に似た、はるかに優れた SQL を生成し、Linq to SQL (「L2S」) よりも保守が簡単で強力です。.NET 4.0 のリリース時点で、Linq to SQL は時代遅れのテクノロジであると私は考えています。MS は、L2S の開発をこれ以上継続しないことを非常にオープンに表明しています。

1) パフォーマンス

これは答えるのが難しい質問です。ほとんどの単一エンティティ操作(CRUD) 3 つのテクノロジすべてでほぼ同等のパフォーマンスが得られます。EF と Linq to SQL を最大限に活用するには、その仕組みを知っておく必要があります。ポーリング クエリなどの大量の操作では、フレームワークが SQL を常に再生成する必要がないように、EF/L2S でエンティティ クエリを「コンパイル」する必要があります。そうしないと、スケーラビリティの問題が発生する可能性があります。(編集を参照)

大量のデータを更新する一括更新の場合、更新を実行するためにデータをネットワーク経由で ORM にマーシャリングする必要がないため、生の SQL またはストアド プロシージャの方が常に ORM ソリューションよりもパフォーマンスが優れています。

2) 開発のスピード

ほとんどのシナリオでは、開発速度に関しては、EF は裸の SQL/ストアド プロシージャを圧倒します。EF デザイナーは、データベースが変更されると (要求に応じて)、データベースからモデルを更新できるため、オブジェクト コードとデータベース コード間の同期の問題に遭遇することはありません。ORM の使用を検討しないのは、更新を行わないレポート/ダッシュボード タイプのアプリケーションを作成する場合、またはデータベースで生のデータ保守操作を行うためだけのアプリケーションを作成する場合だけです。

3) 整然とした保守可能なコード

EF は SQL/sprocs より断然優れています。関係がモデル化されているため、コード内の結合は比較的まれです。エンティティの関係は、ほとんどのクエリで読者にとってほぼ自明です。データに実際に何が起こっているかを理解するために、層から層へとデバッグしたり、複数の SQL/中間層を通過したりする必要があることほど悪いことはありません。EF は、データ モデルを非常に強力な方法でコードに組み込みます。

4) 柔軟性

ストアド プロシージャと生の SQL はより「柔軟」です。ストアド プロシージャと SQL を活用して、特殊なケースに対してより高速なクエリを生成できます。また、ORM よりも簡単にネイティブ DB 機能を活用できます。

5) 全体

ORM を選択するか、ストアド プロシージャを使用するかという誤った二分法にとらわれないでください。同じアプリケーションで両方を使用できますし、おそらくそうすべきです。大規模な一括操作はストアド プロシージャまたは SQL (EF から実際に呼び出すことができます) で実行し、CRUD 操作と中間層のニーズのほとんどには EF を使用する必要があります。レポートの作成には SQL を使用することをお勧めします。この話の教訓はこれまでと同じだと思います。適切なツールを使用してください。しかし、要点は、EF は今日 (.NET 4.0 の時点) で非常に優れているということです。時間をかけて EF を詳細に読み、理解すれば、驚くほど高性能なアプリを簡単に作成できます。

編集:EF 5ではこの部分が少し簡素化され、自動コンパイルされた LINQ クエリしかし、実際に大量のものを扱う場合は、現実世界で何が最適かをテストして分析する必要があります。

おすすめ記事