1. ホーム
  2. sql

[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]

2022-03-22 20:28:35

質問

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

  1. パフォーマンス
  2. 開発スピード
  3. 直感的でメンテナンスしやすいコード
  4. 柔軟性
  5. 全体

私はSQLが好きなので、ずっとADO.NETとストアドプロシージャの熱烈なファンでしたが、最近Linq to SQLを使ってみて、自分のDataAccess層を書き出す速さに圧倒され、Linq to SQLかEFか...あるいはどちらでもないか、本当に理解に時間をかける決心をしました。

ただ確認したいのは、これらの技術のいずれにも、私の研究時間を無駄にするような大きな欠点がないことです。例えば、パフォーマンスがひどいとか、シンプルなアプリではクールだけど、ここまでしかできないとか。

アップデートしてください。 ORM VS SPではなく、EF VS L2S VS SPに集中してもらえないでしょうか。EF VS L2Sに興味があります。しかし、私はプレーンなSQlについてよく知っているので、ストアドプロックに対しても比較してもらいたいと思っています。

どのように解決するのですか?

まず最初に、もしあなたが新しいプロジェクトを始めるのであれば、Entity Framework ("EF") を使ってみてください。 .NET 4.0のリリース時点で、私はLinq to SQLは時代遅れの技術だと考えています。 MSは、L2Sの開発をこれ以上継続しないことを非常にオープンにしています。

1) パフォーマンス

これは答えるのが難しいですね。 ほとんどのシングルエンティティー操作( CRUD この3つのテクノロジーは、ほぼ同等のパフォーマンスを発揮します。 EFとLinq to SQLを最大限に活用するためには、EFとLinq to SQLがどのように動作するかを知っておく必要があります。 ポーリングクエリのような大量処理では、EF/L2Sにエンティティクエリをコンパイルさせ、フレームワークが常にSQLを再生成する必要がないようにしたいでしょうし、スケーラビリティの問題に直面する可能性があります。 (編集を参照)

大量のデータを更新する一括更新の場合、生のSQLまたはストアドプロシージャは、ORMソリューションよりも常に優れたパフォーマンスを発揮します。

2)開発スピード

ほとんどのシナリオで、EFはSQL/stored procsの裸の開発スピードに勝ります。 EFのデザイナーは、データベースの変更に応じてモデルを更新することができるので、オブジェクトコードとデータベースコードの間で同期の問題に遭遇することはありません。 私がORMの使用を考慮しない唯一の時は、更新を行わないレポート/ダッシュボードタイプのアプリケーションを行うとき、またはデータベース上で生のデータメンテナンス操作を行うためだけのアプリケーションを作成するときです。

3)すっきりしたコード、メンテナンス性の高いコード

EFはSQL/sprocに勝るとも劣らない。 リレーションシップがモデル化されているので、コード内の結合は比較的まれです。 エンティティのリレーションは、ほとんどのクエリで、読者にとってほとんど自明なものです。 データに何が起こっているかを理解するために、各階層をデバッグしたり、複数のSQL/中間階層を経由したりすることほど、つらいことはありません。 EFは、非常に強力な方法で、データモデルをコードに取り込みます。

4) 柔軟性

ストアドプロックと生のSQLは、より柔軟性があります。 スプロックとSQLを活用して、特殊なケースでより高速なクエリを生成できますし、ORMを使うよりも簡単にネイティブDBの機能を活用することができます。

5) 全体

ORMの選択とストアドプロシージャの使用という誤った二項対立に巻き込まれないでください。 同じアプリケーションで両方を使用することができますし、おそらくそうすべきです。 大きな一括操作はストアドプロシージャかSQL(実際にEFから呼び出すことができます)で行い、CRUD操作と中間層のニーズのほとんどにはEFを使用すべきです。 おそらくあなたは、レポートを書くためにSQLを使うことを選ぶでしょう。 この話の教訓は、これまでと同じだと思います。 仕事に適したツールを使いましょう。 しかし、皮肉なことに、最近のEFは非常に優れています(.NET 4.0時点)。 EFを深く読み、理解することに時間をかければ、驚くほど高性能なアプリを簡単に作成することができます。

EDIT : EF 5 では、この部分を少し簡略化し 自動コンパイルされたLINQクエリ しかし、実際の大量生産には、何が一番適しているのかをテストし、分析する必要があります。