ストアドプロシージャの使用は1つの方法であり、長年にわたって広く使用されています。
C#(または任意の.NET言語)からSQL Serverデータベースを操作するより現代的な方法は、Entity Frameworkを使用することです。Entity Frameworkの利点は、より高いレベルの抽象化を提供することです。
Microsoftから引用するには(https://msdn.microsoft.com/en-us/data/jj590134):
ADO.NET Entity Frameworkを使用すると、開発者は、リレーショナルストレージスキーマに対して直接プログラミングするのではなく、概念的なアプリケーションモデルに対してプログラミングすることにより、データアクセスアプリケーションを作成できます。目標は、データ指向のアプリケーションに必要なコードとメンテナンスの量を減らすことです。Entity Frameworkアプリケーションには、次の利点があります。
- アプリケーションは、継承、複雑なメンバー、および関係を持つ型を含む、よりアプリケーション中心の概念モデルの観点から機能します。
- アプリケーションは、特定のデータエンジンまたはストレージスキーマへのハードコードされた依存関係から解放されます。
- 概念モデルとストレージ固有のスキーマの間のマッピングは、アプリケーションコードを変更せずに変更できます。
- 開発者は、さまざまなデータベース管理システムに実装されている可能性があるさまざまなストレージスキーマにマップできる、一貫したアプリケーションオブジェクトモデルを使用できます。
- 複数の概念モデルを単一のストレージスキーマにマッピングできます。
- 言語統合クエリ(LINQ)サポートは、概念モデルに対するクエリのコンパイル時の構文検証を提供します。
ORMとストアドプロシージャの使用には、特にセキュリティとロジックが存在する場所に関して、トレードオフが伴います。
SQL Serverを使用した開発に対する「クラシック」なアプローチは、アプリケーションロジックをストアドプロシージャおよびプログラムに常駐させることで、ストアドプロシージャを実行するセキュリティ権限のみを与え、テーブルを直接更新することはできません。ここでの概念は、ストアドプロシージャがアプリケーションのビジネスロジック層であるということです。理論は確かですが、C#やVBなどのプログラミング言語でビジネスロジックを実装することに取って代わられて、さまざまな理由で支持されなくなる傾向があります。優れたアプリケーションは、懸念の分離などを含む段階的なアプローチで実装されますが、MVCのようなパターンに従う可能性が高くなります。
データベースではなくORMにロジックを実装することの欠点の1つは、データベースの責任者(DAまたはDBA)がデータ整合性ルールを簡単にデバッグおよびテストできることです。小切手から普通預金口座への送金の典型的な例を取り上げます。これは、作業の原子単位として、つまりトランザクションに挟まれて行われることが重要です。この種の転送がストアドプロシージャを介してのみ実行できる場合、DAと監査者がストアドプロシージャをQAするのは比較的簡単です。
一方、これがEntity FrameworkのようなORMを介して行われ、本番環境では、まれにチェックからお金が奪われるが節約につながらないことが発見された場合、特に複数のプログラムが潜在的に関与している場合、デバッグははるかに複雑になる可能性があります。これは、おそらく特定のシーケンスで発生する必要のある特有のハードウェアの問題などが関係するエッジケースである可能性があります。これをテストするにはどうすればよいですか?