我有一个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之前临时禁用自动迁移?