Для веб-сайта MVC5 я хочу использовать инициализатор базы данных Entity Framework, который создает и заносит базу данных с некоторыми начальными значениями. Рядом с этим я хочу сохранить список миграций, которые я хочу запускать контролируемым образом при создании исходной базы данных (с некоторыми начальными значениями). Но независимо от того, что я пытаюсь выполнить, миграции выполняются до того, как будет создана и засеяна начальная база данных. После того, как много попыток и читать на постах я прибыл на следующий код:Невозможно отключить миграцию после инициализации базы данных
В Global.asax.cs:
Database.SetInitializer(new App_Start.ProjectHoursDatabaseInitializer());
Initialize выглядит следующим образом:
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)
{
}
}
Проблема в том, что, что бы я ни пытался, миграции выполняются пока исходная база данных еще не создана. Я этого не понимаю. В конфигурации четко сказано, что автоматическая миграция должна быть отключена. Похоже, это не случай. Есть идеи?
Database.Create() может вызвать проблемы - это короткое замыкание стратегии инициализации. http://stackoverflow.com/questions/15692584/ef-5-code-first-create-a-new-database-and-run-all-migrations-programatically и https://msdn.microsoft.com/en- us/library/system.data.entity.database (v = vs.113) .aspx –
Спасибо, к сожалению, если я заменил Create() на CreateIfNotExists(), я получаю тот же результат, запуск начинается без инициализации базы данных. –