あなたは論理的な誤りに陥っています。EF が特定の方法で動作するように設計されているからといって、別の方法で実行してはならないというわけではありません。また、特定のことを特定の方法で行うのに EF が適していないからといって、EF が役に立たない、または何にも使用すべきではないということにはなりません。これは、オール オア ナッシングの引数です。すべてを完璧に行うことができない場合、それは役に立ちません..そしてそれは真実ではありません。
EF はオブジェクト リレーショナル マッピング ツールです。データをオブジェクトとして操作する場合にのみ使用します。データをリレーショナル セット (別名 SQL) として操作する場合は、使用しません。
また、EF を使用するか、何も使用しないことにこだわっていません。クエリには EF を使用し、更新にはストアド プロシージャを使用できます。またはその逆です。与えられた状況に最適なツールを使用することです。
いいえ、EF は「単純な」または「些細な」もののためだけのものではありません。ただし、より複雑なシナリオでこれを使用するには、多くの場合、EF がどのように機能するかについてより深い知識が必要になるため、内部で何を行っているかを知る必要があります。
EF でストアド プロシージャを使用するのは、MyContext.Database.ExecuteSqlCommand()
またはと言うのと同じくらい簡単MyContext.Database.SqlQuery()
です。これは最も基本的な方法であり、基本的なオブジェクトから sproc へのマッピングを提供しますが、キャッシュ、変更追跡などのより複雑な ORM 機能はサポートしていません。
EF6 は、クエリ、更新、および削除をサポートするための sprocs をより完全にサポートし、より多くの機能セットをサポートします。
EF は特効薬ではありません。これにはトレードオフがあり、使用する状況に適しているかどうかを判断する必要があります。
参考までに、オブジェクトを更新する前にオブジェクトを取得する必要があるというのは完全に間違っていますが、それはオブジェクトを処理する最も簡単な方法です。EF は作業単位パターンも実装しているため、10 回の挿入を行う場合、10 回のラウンド トリップを行うのではなく、それらすべてを 1 つの準備済みステートメントとして送信します。
悪い SQL を書くことができるのと同じように、悪い EF クエリを書くこともできます。SQL が得意で EF が苦手だからといって、EF がダメというわけではありません。つまり、あなたはまだその専門家ではありません。
だからあなたの質問には、いいえ。Sprocs の使用が悪い考えだとは誰も言っていません。問題は、多くの場合、sproc はやり過ぎです。また、ロジックを人為的に 2 つの異なるサブシステムに分離します。C# でクエリを作成するということは、ビジネス ロジック全体を 1 つの言語で作成することを意味し、これは多くのメンテナンスの利点となります。一部の環境では sproc を使用する必要があり、一部の環境では必要ありません..