私はエンティティフレームワークを2つのプロジェクトで使用しました。すべてのプロジェクトで、ストアドプロシージャの利点(セキュリティ、保守性など)のために、エンティティにマップされたストアドプロシージャを使用しました。しかし、ストアドプロシージャの99%は基本的なCRUDストアドプロシージャです。これは、Entity Frameworkの主要な時間節約機能の1つ、つまりSQL生成を無効にするようです。エンティティフレームワークのストアドプロシージャと生成されたSQLの比較
ストアドプロシージャに関する引数と、Entity Frameworkから生成されたSQLに関するいくつかの引数を読みました。 CRUD SPを使用するとセキュリティが向上しますが、EFによって生成されるSQLは、必要以上に複雑な場合が多く、パフォーマンスやメンテナンス性の点でSPを使用するのは本当ですか?ここで
は私が信じるものである:時間の
- はほとんど、SPを変更することは、とにかくデータモデル を更新する必要があります。だから、保守性の点ではあまり買っていない。
- Webアプリケーションの場合、データベースへの接続では、アプリケーション固有の単一のユーザーIDが使用されます。したがって、ユーザーはデータベースに直接アクセスすることさえできません。これにより、セキュリティのメリットが減少します。
- 小さなアプリケーションでは、 を使用した場合のパフォーマンスが多少低下しても、おそらく大きな問題はありません。 のボリュームが高い場合、パフォーマンスが重要なアプリケーションの場合は、EFでも賢明になるでしょう ?さらに、挿入/更新/削除ステートメントはEFによって実際に生成された ですか?
- ストアドプロシージャにすべての属性を送信すると、パフォーマンスが低下しますが、EF生成コードは実際に変更された属性のみを送信します。大規模なテーブルの更新を行う場合、ネットワークトラフィックの増加とすべての属性の更新によるオーバーヘッドにより、ストアドプロシージャのパフォーマンス上の利点が無効になる可能性があります。言ったことで
、私の具体的な質問は以下のとおりです。
は正しい上記の私の信念はありますか? ORMが人気を集めている今、SPSを常に「古い学校」なものにする考えはありますか?あなたの経験では、すべての挿入/更新/削除のためにSPをマッピングするか、CRUD操作にEFで生成されたSQLを使用し、より複雑なものに対してはSPのみを使用するEFを使用する方がよいでしょうか?
「SPを変更するとデータモデルを更新する必要があります」SPは、少なくとも5か所ですべての変更を行う必要があるだけでなく、アプリケーションのメンテナンスコストを大幅に増加させます(挿入、更新、削除、少なくとも1つは選択、次にエンティティモデルでも同様)、単純なCRUD操作ではないものについては、アプリケーションロジックをアプリケーション外に隠しているため、開発者は別のIDEの。 –