实体框架4.1代码首先不创建表

时间:2011-08-30 21:59:06

标签: entity-framework-4 ef-code-first

我正在使用EF 4.1并使用DBContext等创建了一个存储库。连接字符串设置为指向SQL Server 2008 R2 Dev版。

当我运行一个调用我的网关的控制台应用程序,然后又添加一个实体并保存时,会抛出一个异常,说它无法找到该表。当我查看我的数据库时,创建了一个数据库但除了EmdMetadata之外没有自动创建表。

我错过了什么吗?

标记

4 个答案:

答案 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创建

相关问题