0

一連のレポートを 6 か月ごとに実行し、結果をテーブルに保存して、将来いつでも照会/表示できるようにします。サイクルに応じて、2 つまたは 4 つのテーブルが追加されます。これらには、yyyy_mmm_Table_x という標準の命名規則があります。

私たちの Web サイトは ASP.Net MVC2 を使用して構築されており、データベースは Code First ではなく標準モデル デザイナーを使用して EF4 を使用してモデル化されています。

実行時にレポート テーブルを EF4 コンテキストに動的に追加できるようにしたいと考えています。デザイナーを使用してそれらをモデルに手動で追加する必要はありません。それ以外の場合は、余分なレポートを追加したという理由だけで、レポート サイクルごとにモデルを更新して再コンパイルする必要があります。他に何も変更されていない場合、これはメンテナンスの頭痛の種になります。

sysobjects にクエリを実行するだけで、使用可能なテーブルのリストを取得できます。このリストを取得して、サイトの起動時にテーブルをコンテキストに追加できれば、ダイナミック LINQ ライブラリのようなものを使用して、ユーザーがドロップダウンから選択したテーブルに応じてクエリを実行できます。

EF4 の Code First をすぐに使用することはできません。これは、テーブルの具体的なクラスを作成する必要があり、同じメンテナンスの頭痛の種になるためです。Code First フレームワークがコンテキストを動的に更新するために使用するのと同じ戦略を使用できると思いますが、このライブラリをまったく見ていないので、詳しい人が正しい方向に向けてくれることを願っています.

そうでなければ、この領域を処理するために ADO.Net に戻る必要があると思います。それが最も簡単な方法かもしれないので、コメントを探していると思います。私は熱心ではないので、すべてを LINQ と EF4 にする必要はありません。:)しかし、特にDynamic LINQを利用できる場合は、少しきれいで一貫しているように見えます。しかし、古い方法の方が簡単な場合もあります。

ですから、何か提案やコメントがあれば、ぜひ聞いてみたいと思います。

ありがとう!

4

1 に答える 1

0

ObjectSet共通の EF を使用しても、テーブルをマップするときに、クエリを実行できるようにするために新しいエンティティ タイプの新しいものが必要になるため、テーブルごとに新しいデータ タイプが必要です。私が知っているように、テーブル構造がまったく同じであっても、2 つのテーブルを同じエンティティにマップすることはできません。

すべてのランタイム マッピングは、MetadataWorkspaceによって準備されて格納されEntityConnectionます。したがって、それを試してみたい場合は、そこから始めることができますが、これらのクラスのパブリック インターフェイスは有望に見えません。

これらのテーブルでLinq-to-entitiesを実行したいと思うので、データパラメータに基づいて正しいテーブルからデータを返すストアドプロシージャを使用することはおそらくオプションではありません。

これには、一般的な ADO.NET を使用する必要があります。

于 2011-02-18T09:00:20.373 に答える