LINQ-to-SQL とストアド プロシージャの違いは? [closed] 質問する

LINQ-to-SQL とストアド プロシージャの違いは? [closed] 質問する

私はStackOverflowの「LINQ初心者ガイド」の投稿を見てみました(LINQ初心者ガイド)ですが、次のような追加の質問がありました。

私たちは、ほぼすべてのデータベース操作がかなり単純なデータ取得になる新しいプロジェクトを立ち上げようとしています (プロジェクトの別のセグメントでは、既にデータを書き込んでいます)。これまでの他のプロジェクトのほとんどは、そのような処理にストアド プロシージャを使用しています。ただし、より合理的であれば、LINQ-to-SQL を活用したいと思います。

そこで質問です。単純なデータ取得の場合、LINQ-to-SQL とストアド プロシージャのどちらのアプローチが優れているでしょうか。具体的な長所や短所はありますか。

ありがとう。

ベストアンサー1

sproc と比較した LINQ の利点:

  1. 型安全性: 私たちは皆これを理解していると思います。
  2. 抽象化: これは特にLINQ-to-Entitiesこの抽象化により、フレームワークは簡単に利用できる追加の改善も追加できるようになります。プランクLINQ にマルチスレッド サポートを追加する例です。このサポートを追加するためのコード変更は最小限です。単に sproc を呼び出すだけのこのデータ アクセス コードを実行するのははるかに困難です。
  3. デバッグサポート: クエリをデバッグするには、任意の .NET デバッガーを使用できます。sprocs では、SQL を簡単にデバッグすることはできず、そのエクスペリエンスは主にデータベース ベンダーに結び付けられます (MS SQL Server はクエリ アナライザーを提供しますが、多くの場合、それだけでは十分ではありません)。
  4. ベンダーに依存しない: LINQ は多数のデータベースで動作し、サポートされるデータベースの数は増える一方です。Sproc は、構文や機能サポートが異なるため (データベースが Sproc をサポートしている場合)、データベース間で必ずしも移植できるとは限りません。
  5. 展開: すでに他の人が言及していますが、sproc のセットをデプロイするよりも、単一のアセンブリをデプロイする方が簡単です。これは #4 とも関連しています。
  6. より簡単に: データ アクセスを行うために T-SQL を学習する必要はありません。また、sproc を呼び出すために必要なデータ アクセス API (ADO.NET など) を学習する必要もありません。これは、#3 および #4 に関連しています。

LINQ と sprocs の欠点:

  1. ネットワークトラフィック: sproc は、sproc 名と引数データをネットワーク経由でシリアル化するだけで済みますが、LINQ はクエリ全体を送信します。クエリが非常に複雑な場合、これは非常に問題になる可能性があります。ただし、LINQ の抽象化により、Microsoft はこれを徐々に改善することができます。
  2. 柔軟性が低い: Sprocs はデータベースの機能セットを最大限に活用できます。LINQ はサポートがより汎用的になる傾向があります。これは、あらゆる種類の言語抽象化 (例: C# とアセンブラー) で共通です。
  3. 再コンパイル: データアクセス方法を変更する必要がある場合は、アセンブリを再コンパイルし、バージョン管理し、再展開する必要があります。Sprocsは時々DBA が何かを再展開することなくデータ アクセス ルーチンを調整できるようにします。

セキュリティと管理性についても議論があります。

  1. 安全たとえば、テーブルへの直接アクセスを制限し、ストアドプロシージャにACLを設定することで機密データを保護できます。ただし、LINQを使用すると、テーブルへの直接アクセスを制限し、代わりに更新可能なテーブルにACLを設定できます。ビュー同様の目的を達成します (データベースが更新可能なビューをサポートしていると仮定)。
  2. 管理性: ビューを使用すると、スキーマの変更 (テーブルの正規化など) の影響を受けずにアプリケーションを保護できるという利点もあります。データ アクセス コードを変更することなくビューを更新できます。

私はかつては sproc 派でしたが、全般的に LINQ のほうがよい選択肢であると考えるようになりました。sproc の方が明らかに優れている領域がある場合は、おそらく sproc を記述しながらも、LINQ を使用してアクセスするでしょう。:)

おすすめ記事