これは少し自由回答の質問だと思うので、ここに私の 2c を示します。(tl dr の場合は、最後のセクションに移動します)
私にとっては、「EF/Linq を渡す」ということではなく、適切なデータ永続化ライブラリを選択する必要があるということです。私は MVC で PetaPoco、Ado.Net、NHibernate/ActiveRecord、Linq2Sql、EF (私の主な選択) を使用しました。
実際のベスト プラクティスは、コントローラーがまだプレゼンテーション レイヤーの一部であり、HttpContext 関連の操作 + ビジネス ロジック サービス クラスの呼び出し以外は処理しないことを認識することから得られます。
クラスを次のように配置します:
プレゼンテーション (MVC) -> ロジック サービス (単純なクラス) -> データ アクセス (「リポジトリ」でラップされたコンテキスト)。
したがって、EFを使用するかどうかがasp.net MVCに影響を与えるかどうかは、まったく想像できません。
私にとって、データ アクセスは DTO でデータを返します。
public List GetAllFoos()
そのメソッド文字列が xml などから連結されるか、単純な Context.Foos.ToList() を実行するかは、アプリケーションの残りの部分とは無関係です。私が気にするのは、Data Access が列に一致する文字列を含む DataSet を返さないことだけです。それらはDALにとどまります。
ポイント 1 と 2 を参照してください。私のリポジトリには CRUD メソッドがあります。それがどのように行われるかは、残りのアプリケーションには関係ありません。私のリポジトリ クラスへの最も基本的なインターフェイスの 1 つを取り上げます。
public interface IFooRepository { void Save(Foo foo) Foo Get(int id) void Create(Foo foo) void Delete(int id) }
1点まだ触れていませんが、DIも重要です。具体的な実装 "FooRepository" は、Web サービス、コンテキスト クラスなどの依存関係を要求することを選択できます。ただし、これらは、インターフェイスに依存する呼び出し元にはまったく関係ありません。
上記の 3 つのポイントの後にまだ例が必要な場合は、コメントをドロップしてください。Ado.net を使用して非常に簡単なものを作成します。
================================================== =========================
EFにするかEFにしないか。
私にとって、新しいスキーマで新しいプロジェクトを開始する場合、最初に EF コードを使用します。
新しいコードを古いデータベースに合わせる + 古いプロジェクトには、再利用できる ORM マッピングがない = PetaPoco.
================================================== =========================
プロジェクトのコンテキストでは:
「SQL レポート開発者向けの SQL プラグイン レポート ツール」。「その」SQLレポートサービス?なぜあなたが何かをする必要があるのか わかりませんか?SSRSはすでにそれを行っていませんか?(SQL ステートメント/データ ソースの入力、パラメーターのフォームの生成など)。
そうでない場合は、設計上の決定に疑問を呈します。IMVHO、アプリケーションのユーザー (「レポート開発者」かどうかは気にしません) が SQL ステートメントを入力する必要があるのは、通常、「建築宇宙飛行士」に由来します。GUI を介して文字列として入力した場合、SQL ステートメントをどのようにデバッグしますか? テーブルと関係をどのように知ることができますか? SSMS を掘り下げて gui に戻るか、複雑な UI を構築します (別名、SSMS を再構築します)。
結局のところ、膨大な数の異なるユーザーの膨大な数のレポートが必要な場合は、料金を支払う必要があります。アプリケーションを公開して SQL ステートメントを受け入れるだけの「アーキテクチャの宇宙飛行士」が多すぎて、アプリケーションに何を入れるべきかを推測するのに時間を無駄にしているのを目にします。コスト削減は全くありません。
わかりました、それをしなければならないのなら、そうですね...頑張ってください。最善の策は、DataTable として返され、行/列/データをビューにダンプし、ネストされた foreach が行、列をループすることです。