すべてのストアドプロシージャを使用する必要がある場合は、EFを使用することはあまり意味がありません。実際、EFの最大の利点の1つは、データの取得/挿入/更新/削除のための厳格な数のパラメータと適切なクエリのsintaxを使用して、自動的にクエリを生成することです。
あなたが失うEFの二つの利点があります。
- ナビゲーションを、すなわち、容易すなわち、熱心明示的または遅延読み込みと、
- 形のデータを関連データを取得するプロパティを持つエンティティを取得するには、他のエンティティまたはエンティティの集合
- 単純なCRUD操作(不活性/更新/削除/選択)の自動生成。この操作にstoed procsを指定することができます
- データベースが単にモデルを変更するだけであれば、適切なクエリを得ることができます(EFを使用する方法によってはほぼ自動的に行うことができます)。アドホックフィルタに関連する保存されprocsのにクエリの *自動生成を変更する必要があります(異なる列以上の異なるSETOF条件を持つフィルタ)
あなたはEFは、クエリを生成させない場合は、簡単ではありませんナビゲーション、形状データ、適切なクエリの自動生成、フィルタなどがあります。あなたがモデルで本当に大変な作業をしている場合にのみ、Somefotが可能になります。あなたがEFを使用している場合しかし、あなたはあなたのモデルを更新した場合、変更内容の一部が失われる可能性がすると、データベースに
を形成し、保存されprocsのを使用することが正当化される機会は、次のとおりです。
- あなたがデータを変更する必要がありますEFで直接変更できないもの(古いバージョンのEFで更新可能なクエリはサポートされていませんでした)
- EFで生成されたクエリではなく、使用するストアドプロシージャを最適化しました。
- 多くのことをするストアドプロシージャ(単純な挿入/更新/削除や選択ではないものプロシージャ)
- ストアドプロシージャが自動的に生成されたクエリに対していくつかの利点を提供する他の場合。
残りのすべての質問については、EFがあなたに適しています。
すべてのストアドプロシージャを使用する必要がある場合は、EFを使用する利点はデータのエンティティへの自動マッピングですが、EFの他の多くの利点が失われます。あなたがこれを行う必要があるでしょう
:
- あなたは別のデータのように多くのエンティティを定義する必要があります保存されprocsの
- フォームが返されますが、各ストアドプロシージャをマッピングする必要があります関数(関数にマップされている)、モデル(edmx)を変更して、挿入/更新/削除に使用するプロシージャを知らせます。
それらの間に関係があるエンティティ間の関係でモデル化する。
repository.Find(...)
に関する質問に対して、あなたが正しいとすれば、すべてのデータが照会され、クライアント側でフィルタリングされます。最悪の場合、モデルが正しく定義されていないと、失敗する可能性があります。
EFでクエリを作成させると、サンプルに似た単一のケースでDBに適切なフィルタが送信されます。 特定の方法でフィルタリングする特殊なストアドプロシージャがある場合は、LINQを忘れて、マップされた関数を直接呼び出す必要があります。
したがって、SPを使用するのが正当な理由がない限り、EFにクエリを作成させる方がよいでしょう。
クエリ構成LINQとクエリ-sprocsを同時に効率的に使用することは事実上不可能です。基本的には、sprocsの周りにラッパーコードを書くための精巧な方法としてEFを使用しています。 –