[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
質問
それぞれについて、どのように評価しますか。
- パフォーマンス
- 開発スピード
- 直感的でメンテナンスしやすいコード
- 柔軟性
- 全体
私は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クエリ しかし、実際の大量生産には、何が一番適しているのかをテストし、分析する必要があります。
関連
-
[解決済み] 不変量名 'System.Data.SqlClient' を持つ ADO.NET プロバイダに対応する Entity Framework プロバイダが見つかりませんでした。
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] SQL Serverにおける関数とストアドプロシージャの比較
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] Entity Frameworkにおける最速の挿入方法
-
[解決済み] Entity Frameworkで生成されたSQLを表示するにはどうすればよいですか?
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み] Selectステートメントで特定のフィールドの重複を検索する
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
plsql-stored-procedure ORA-06550 エラー処理
-
SQL-初心者のためのベスト入門SQLクエリ I
-
[解決済み] SQLの結合形式 - 入れ子になった内側join
-
[解決済み] データベースのインデックス作成はどのように行われるのですか?[クローズド]
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] 複数の列でgroup byを使用する
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLのインデックスとは何ですか?
-
[解決済み] "ON UPDATE CASCADE "を使用する場合について
-
[解決済み】ORMを使うか、プレーンなSQLを使うか?[クローズド]