5

そのため、コンパイル時に列が不明なデータベースで Entity Framework (DbContext) を使用する必要がある状況に遭遇しました。基本的に、customTable クラスをハードコーディングして DbSet に入れる余裕はありません。

この問題を解決するために考えられる唯一の方法は、Reflection.Emit を使用して、データベースに問い合わせて収集した情報に基づいて実行時に customTable クラスを作成することです。

この問題を解決する情報を見つけることができませんでしたが、Entity Framework を使用するのは初めてなので、経験豊富な人にとっては解決策がより明白になるでしょう。

Reflection.Emit を使用して DbSet にフィードするクラスを動的に作成するよりも、よりクリーンな方法が必要だと思います。

私が Entity Framework の意図された使用法に基づいていない場合、その情報も役立ちます。

4

1 に答える 1

0

こんにちは、私もこの問題を調査しており、解決策のように見えるものを見つけました。

http://romiller.com/2012/03/26/dynamically-building-a-model-with-code-first/

型をパラメーターとして使用して新しい DbSet を追加する DbContext を作成する方法を説明します。このタイプは、ダイナミック Linq ライブラリを使用して作成できます。

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

これには CreateClass というメソッドがあり、フィールド名のリストから POCO クラス定義を動的に作成してロードすることができます。その後、作成した新しい型を使用して DbSet を作成できます。

次に、更新された DbContext から非ジェネリック DbSet を取得できます。

db.Set(type)

ここで、'type' は新しい型を保持する変数です。これは、動的 linq ライブラリの linq 述語を使用して処理できます。

ちなみに、私のアプリケーションは、新しいモジュールが CMS のコア データ テーブルにフィールドを追加できる CMS 用です。特定のモジュールがすべてを持つ型を提供できないため、DI は柔軟性に欠けるため、使用したくありません。必要なフィールドと、他のすべての未知のモジュールも必要になる可能性があります。

ジェームズ

于 2013-02-09T14:46:40.663 に答える