私はMVCとEFを初めて使用します。私のアプリは単純なコードです-最初にいくつかのPOCOクラスと次のようなDBContextがあります:
public class ExpDefContext : DbContext
{
public DbSet<Experiment> Experiments { get; set; }
public DbSet<Research> Researches { get; set; }
...
問題:データモデルにエンティティセットを追加する必要があります。そのタイプは実行時にユーザー入力から作成されます。つまり、データ構造がわかりません。
非ジェネリックDbsetクラスはこのためだけに作成されていることを読んだので、コンテキストに追加しました。
public DbSet Log { get; set; }
...そして、runtime-typeを受け入れ、新しいDbsetを設定するコンテキストのコンストラクターを作成しました。
public ExpDefContext(Type LogRecType)
{
Log = Set(LogRecType);
}
(ちなみにタイプはReflection.Emitを使用して作成されています)。
コントローラでタイプ(LogRecという名前)を作成し、それを新しいDBContextインスタンスに渡します。次に、LogRecインスタンスを作成し、それをデータベースに追加しようとします。
Type LogRec;
LogRec = LogTypeBuilder.Build(dbExpDef, _experimentID);
var dbLog = new ExpDefContext(LogRec);
var testRec = LogRec.GetConstructor(Type.EmptyTypes).Invoke(Type.EmptyTypes);
dbLog.Log.Add(testRec);
dbLog.SaveChanges();
そして、dbLog.Log.Add(testRec)から例外が発生します。
エンティティタイプLogRecは、現在のコンテキストのモデルの一部ではありません
私は何が間違っているのですか?これを行うためのより良い方法はありますか(できればEntity Frameworkを深く掘り下げずに)?
ありがとう