まず、新しいプロジェクトを開始する場合は、Entity Framework( "EF")を使用します。これにより、より優れたSQL(Linq to SQLと同様)が生成され、Linq to SQL( " L2S」)。.NET 4.0のリリースの時点では、Linq to SQLは時代遅れのテクノロジーであると考えています。MSは、L2S開発をこれ以上継続しないことについて非常にオープンです。
1)パフォーマンス
これは答えるのが難しいです。ほとんどの単一エンティティー操作(CRUD)では、3つのテクノロジーすべてでほぼ同等のパフォーマンスが得られます。EFとLinq to SQLを最大限に活用するには、それらがどのように機能するかを知っている必要があります。ポーリングクエリなどの大量の操作の場合、EF / L2Sでエンティティクエリを「コンパイル」して、フレームワークがSQLを常に再生成する必要がないようにするか、スケーラビリティの問題が発生する可能性があります。(編集を参照)
大量のデータを更新する一括更新の場合、生のSQLまたはストアドプロシージャは、ORMソリューションを介してデータをORMにマーシャリングする必要がないため、常にORMソリューションよりもパフォーマンスが高くなります。
2)開発のスピード
ほとんどのシナリオでは、EFは開発のスピードに関しては、裸のSQL /ストアドプロシージャを吹き飛ばします。EFデザイナは、変更に応じて(要求に応じて)データベースからモデルを更新できるため、オブジェクトコードとデータベースコードの間で同期の問題が発生することはありません。ORMの使用を検討しないのは、更新を行わないレポート/ダッシュボードタイプのアプリケーションを実行しているとき、またはデータベースで生データのメンテナンス操作を行うだけのアプリケーションを作成しているときだけです。
3)きちんとした/保守可能なコード
EFはSQL / sprocsに勝っています。関係はモデル化されているため、コード内の結合は比較的まれです。エンティティの関係は、ほとんどのクエリの読者にとってほぼ自明です。データに実際に何が起こっているのかを理解するために、層から層へのデバッグ、または複数のSQL /中間層を経由する必要があることほど悪いことはありません。EFは、非常に強力な方法でデータモデルをコードに取り込みます。
4)柔軟性
ストアドプロシージャとraw SQLはより「柔軟」です。sprocsとSQLを活用して、奇妙な特定のケースでより高速なクエリを生成できます。また、ORMを使用するよりも簡単にネイティブDB機能を活用できます。
5)全体
ストアドプロシージャを使用するのではなく、ORMを選択するという誤った二分法にとらわれないでください。 両方を同じアプリケーションで使用でき、おそらく使用する必要があります。大きな一括操作は、ストアドプロシージャまたはSQL(実際にはEFから呼び出すことができます)で行う必要があります。EFは、CRUD操作とほとんどの中間層のニーズに使用する必要があります。おそらく、レポートの作成にSQLを使用することを選択します。ストーリーのモラルはいつもと同じだと思います。ジョブに適したツールを使用します。しかし、その細い点は、EFが今日非常に優れていることです(.NET 4.0現在)。リアルタイムで読んで理解することで、驚くほど高性能なアプリを簡単に作成できます。
編集:EF 5は、自動コンパイルされたLINQクエリを使用してこの部分を少し簡略化しますが、実際の大量のものについては、実際に何が最適であるかをテストおよび分析する必要があります。