Первые миграции EF Code: повторное создание базы данных и исходного кода

Я использую инициализатор MigrateDatabaseToLatestVersion и метод Seed в DbMigrationConfiguration:

public sealed class Configuration : DbMigrationsConfiguration<Context>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        ContextKey = "...";
    }

    protected override void Seed(Context context)
    {
        context.MyEntities.AddOrUpdate(p => p.Name, new[]
        {
            new MyEntity { Name = "Name 1" },
        });
        context.SaveChanges();
    }
}

Автоматическая миграция прекрасно работает с существующей базой данных. Но когда нет существующей базы данных (*.mdf, LocalDb), при первом запуске приложения инициализатор вызывает только Up() методов из DbMigration без Seed. Метод Seed вызывается только после перезапуска приложения.

Если я вручную вызову Upgrade-Database перед первым запуском, он создаст базу данных, а метод Seed будет вызван при первом запуске.

Как автоматически инициализировать базу данных с помощью данных Seed при запуске приложения, когда существующей базы данных нет?




Ответы (1)


Я думаю, что это действительно решит вашу проблему:

Использование Entity Framework Code First Migrations для автоматического создания и автоматического обновления приложения

В этом коде после инициализации базы данных экземпляр System.Data.Entity.Migrations.DbMigrator используется для ручного применения всех ожидающих миграций.

Проблема с этим решением заключается в том, что вам нужна первоначальная миграция. Хотя в связанной статье это не объясняется, я думаю, что вы можете создать первоначальную миграцию для пустой базы данных, создав ее из консоли Nuget перед включением автоматической миграции.

person JotaBe    schedule 29.05.2014
comment
Обновленная ссылка: galleryserverpro.com/ - person Roger; 21.01.2015