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

Mar*_*ark 10 entity-framework-4 ef-code-first

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

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

我错过了什么吗?

标记

ian*_*lly 8

您可以自己创建表 - 最简单的方法是:

IObjectContextAdapter adapter = (IObjectContextAdapter)context;
string script = adapter.ObjectContext.CreateDatabaseScript();
context.Database.ExecuteSqlCommand(script);
Run Code Online (Sandbox Code Playgroud)

上下文是我的EF 4.1数据库上下文.在此代码之前,我删除了所有表(从上次创建数据库开始),然后在此之后使用数据对其进行种子处理.


shu*_*iar 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这并没有解决我的问题,但对于那些仍然没有解决这个问题的人来说,OnModelCreating需要使用DbModelBuilder而不仅仅是模型构建器.不知道什么时候改变了. (3认同)