我是 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; }
...并为接受运行时类型并设置新 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 不是当前上下文模型的一部分
我究竟做错了什么?有没有更好的方法来做到这一点(最好不要深入实体框架)?
谢谢