Как программно использовать миграцию в Entity Framework Core - PullRequest
0 голосов
/ 02 октября 2018

Итак, я хочу использовать миграции программным способом, для этого я сделал что-то вроде этого.

Seed - это метод расширения, который я создал через StoreContext

StoreContext - этоmy DbContext

 internal StoreContext(DbContextOptions options)
            : base(options)
        {
            RelationalDatabaseCreator creator = this.GetService<IDatabaseCreator>() as RelationalDatabaseCreator;

            if (!creator.Exists())
            {
                creator.Create(); ///=> create database
                creator.CreateTables(); ///=> create database tables
            }

            Database.Migrate(); ///=> apply migrations

            if (creator.Exists())
            {
                this.Seed(); 
            }
        }

Если база данных не существует, то когда я запустил

Add-Migration Initial

все хорошо (это толькодля моей первой миграции)

Если я решу добавить новую миграцию

Add-Migration Add_Student_FirstName

новое поле в Student, тогда я получу этот PMCисключение

В базе данных уже есть объект с именем SomeTableName.

SomeTableName, на который жалуется консоль, не обязательно является таблицей, к которой я добавилизменение.

Но если я войду в свой код и прокомментирую строку для

 Database.Migrate(); ///=> apply migrations

и запустлю снова

Add -Student_FirstName

все снова хорошо (моя миграция добавлена ​​в Migrно я все еще должен выполнить миграцию вручную, используя команду

Update-Database

)

Так что же не так в том, чтоЯ делаю, и как мне это исправить, чтобы миграция применялась автоматически при ее создании?

Спасибо

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете использовать метод Database.Migrate() в вашем Startup.cs.

. Для этого вы можете использовать контекст базы данных в startup.cs, например,

using (var dbContext = new DbContext(...))
{
    dbContext.Database.Migrate();
}
...