我正在使用EF 4.1并使用DBContext等创建了一个存储库。连接字符串设置为指向SQL Server 2008 R2 Dev版。
当我运行一个调用我的网关的控制台应用程序,然后又添加一个实体并保存时,会抛出一个异常,说它无法找到该表。当我查看我的数据库时,创建了一个数据库但除了EmdMetadata之外没有自动创建表。
我错过了什么吗?
标记
答案 0 :(得分:8)
您可以自己创建表格 - 最简单的方法是:
IObjectContextAdapter adapter = (IObjectContextAdapter)context;
string script = adapter.ObjectContext.CreateDatabaseScript();
context.Database.ExecuteSqlCommand(script);
上下文是我的EF 4.1数据库上下文。在此代码之前,我删除了所有表(从上次创建数据库时开始),然后在此之后使用数据对其进行播种。
答案 1 :(得分:8)
要设置自动放置并创建你会做这样的事情......
public class MyDbContext : DbContext
{
public IDbSet<Foo> Foos { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new MyDbContextInitializer());
base.OnModelCreating(modelBuilder);
}
}
public class MyDbContextInitializer : DropCreateDatabaseIfModelChanges<MyDbContext>
{
protected override void Seed(MyDbContext dbContext)
{
// seed data
base.Seed(dbContext);
}
}
答案 2 :(得分:1)
更好:将初始化程序添加到静态构造函数中,如下所示:
public class MyDbContext : DbContext
{
static MyDbContext()
{
Database.SetInitializer(new MyDbContextContextInitializer());
}
}
答案 3 :(得分:-1)
您需要将其添加到Application_Start()
Database.SetInitializer(new MyDbContextContextInitializer());
var context = new MyDbContextContext();
context.Database.Initialize(true);
最后一行强制DB创建