5

Microsoft は、単純で些細なことを簡単に開発できるようにする方法を提供してきました。

私が EFxx で嫌いなことがいくつかあります。何よりもまず、更新を行うには最初にレコードをロードする必要があるため、操作はブール値を更新するだけの 2 ステップのプロセスになります。

次に、ストアド プロシージャが好きです。同じ接続呼び出し内で 10 個の異なるものを実行できるためです。EFxx を使用している場合は、10 個の個別の DB 呼び出しを実行する必要があります (更新が必要な場合はそれ以上)。

私の懸念と MVC EF 教祖への質問は... ストアド プロシージャを使用するのはそんなに悪い考えですか? 私は今でも EFxx を、単純なプログラムをより迅速に開発するために Microsoft が提供するもう 1 つの方法だと考えていますが、実際には、これは真に推奨される方法ではありません。

特に「EFxxで更新を実行する最良の方法は何か」と「ストアドプロシージャはEFxxに悪い」という概念について、ヒントやヒントをいただければ幸いです。

4

2 に答える 2

8

あなたは論理的な誤りに陥っています。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 を使用する必要があり、一部の環境では必要ありません..

于 2013-06-07T06:57:37.310 に答える
6

これは何度も尋ねられ、答えられました。このように

どちらにも必ずメリットとデメリットがあります。それはあなたにとって何が重要かという問題です。単純な CRUD 操作 (一度に 1 つずつ) が必要ですか? 私はおそらくORMを使用します。一括 DB 操作を行いますか? SP を使用します。迅速な開発を行う必要がありますか? ORM を使用します。SQL を完全に制御する必要があるような柔軟性が必要ですか? SPを使用。

また、EF のコンテキストが行う DB トリップの数を減らすことができることに注意してください。さまざまな種類の EF 読み込みについて詳しく読むことができます。また、EF では SP の呼び出しが可能です。SP を使用してデータを読み取り、SP を使用して追加/更新します。

于 2013-06-07T06:45:49.707 に答える