对于MVC5网站,我想使用一个Entity Framework Database初始化程序来创建带有初始值的数据库并将其种子化。接下来,我要保留一个列表,该列表用于在创建初始数据库(带有一些初始值)时以受控方式运行。但是无论我如何尝试,迁移都是在创建和播种初始数据库之前执行的。经过大量尝试和阅读后,我得出了以下代码:
在global.asax.cs中:
Database.SetInitializer(new App_Start.ProjectHoursDatabaseInitializer());
初始化看起来如下:
public class ProjectHoursDatabaseInitializer : IDatabaseInitializer<ProjectHoursDbContext>
{
public void InitializeDatabase(ProjectHoursDbContext context)
{
if (context.Database.Exists())
{
if (!context.Database.CompatibleWithModel(throwIfNoMetadata: false))
{
var migrator = new DbMigrator(new ProjectHours.Migrations.Configuration());
migrator.Update();
}
}
else
{
context.Database.Create();
// The problem is that migrations are executed at this point
// The migrations must not run (cannot run),
// The only thing that must happen is creating tables
// and inserting some initial data.
SeedDatabase(context);
context.SaveChanges();
}
}
}
迁移配置如下所示:
internal sealed class Configuration : DbMigrationsConfiguration<ProjectHours.ProjectHoursDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
ContextKey = "ProjectHours.ProjectHoursDbContext";
}
protected override void Seed(ProjectHours.ProjectHoursDbContext context)
{
}
}
问题是无论我尝试什么,都将在尚未创建初始数据库的情况下执行迁移。我不明白在配置中,它明确指出应禁用自动迁移。
看来情况并非如此。任何的想法?
最佳答案
您是否尝试过:Global.asax中的Database.SetInitializer<ProjectHoursDbContext>(new CreateDatabaseIfNotExists());
?
关于c# - 数据库初始化后无法禁用迁移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33055139/