当项目包含迁移时,首先创建新的数据库代码

时间:2017-01-11 17:27:38

标签: entity-framework ef-migrations

我有一个EF6项目,应该创建自己的数据库。所以在数据库上下文的构造函数中,我设置了Initializer

Database.SetInitializer<AudmDatabaseContext>(new AudmDatabaseInitializer());

AudmDatabaseInitializer是一个类型为System.Data.Entity.CreateDatabaseIfNotExists的类,它实现我的种子方法以在创建后填充一些默认数据。

我发现如果我打开一个新的上下文并尝试访问一些数据,那么将自动创建数据库,因此可以使用创建新数据库的特殊参数启动我的程序。该参数触发了这段代码

using (var db = new AudmDatabaseLib.Model.AudmDatabaseContext())
{
     if (!db.Database.Exists())
     {
          bool created = db.Database.CreateIfNotExists();
     }
}

这就是奇怪的事情:只要我的项目不包含任何迁移,这就完美无缺。如果存在任何迁移,则迁移开始执行..当然,它们会因为没有数据库而失败。如果我删除迁移.cs文件(Configuration.cs可以保留......似乎没有任何影响),那么事情按预期工作,然后在第一次正常运行时,执行迁移。

似乎在有迁移的情况下,那些首先出现..即使我看到正在执行db.Database.CreateIfNotExists,所以我知道它知道数据库不在那里并且执行迁移毫无意义

这是我的迁移配置btw

public Configuration()
{
    AutomaticMigrationsEnabled = true;
    ContextKey = "AudmDatabaseLib.AudmDatabaseContext";
    AutomaticMigrationDataLossAllowed = true;
}

如何确保在自动迁移之前运行数据库创建?或者有没有办法在我调用CreateIfNotExists之前临时禁用自动迁移?

0 个答案:

没有答案