public ApplicationDbContext CreateDbContext(string[] args)
{
var optionsBuilder =
new DbContextOptionsBuilder
var connectionString = @"server=.,5433;Database=AutoLot;
User Id=sa;Password=P@
ssw0rd;"; optionsBuilder.UseSqlServer(connectionString);
Console.WriteLine(connectionString);
return new ApplicationDbContext(optionsBuilder.Options);
}
}
}
Создание начальной миграции
Вспомните, что первая миграция создаст три файла: два файла с частичным классом миграции и еще один с полным моментальным снимком модели. Введите в окне командной строки показанную далее команду, находясь в каталоге AutoLot.Dal
Initial (используя экземпляр только что полученного класса ApplicationDbContext) и поместить файлы миграции в каталог EfStructures\Migrations проекта AutoLot.Dal:dotnet ef migrations add Initial -o EfStructures\Migrations
-c AutoLot.Dal.EfStructures.ApplicationDbContext
На заметку!
Важно позаботиться о том, чтобы в сгенерированные файлы или базу данных не вносились изменения до тех пор, пока не будет создана и применена начальная миграция. Изменения на любой из сторон приведут к тому, что код и база данных утратят синхронизацию. После применения начальной миграции все изменения должны вноситься в базу данных через миграции EF Core.Удостоверьтесь в том, что миграция была создана и ожидает применения, выполнив команду list
dotnet ef migrations list -c AutoLot.Dal.EfStructures.ApplicationDbContext
Результат покажет, что миграция Initial
Console.Writeline в методе CreateDbContext:Build started...
Build succeeded.
server=.,5433;Database=AutoLot;User Id=sa;Password=P@ssw0rd;
20201231203939_Initial (Pending)
Применение миграции
Самый простой способ применения миграции к базе данных предусматривает ее удаление и повторное создание. Если вас он устраивает, тогда можете ввести приведенные ниже команды и перейти к чтению следующего раздела:
dotnet ef database drop -f
dotnet ef database update Initial -c AutoLot.Dal.EfStructures.ApplicationDbContext
Если вариант с удалением и повторным созданием базы данных не подходит (скажем, в случае базы данных Azure SQL), то инфраструктуре EF Core необходимо обеспечить
dotnet ef migrations script --idempotent -o FirstMigration.sql
Важными частями сценария являются те, которые создают таблицу __EFMigrationsHistory
IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL
BEGIN
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
END;
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20201231203939_Initial', N'5.0.1');
Если вы теперь запустите команду list
Initial как ожидающую обработки. После применения начальной миграции проект и база данных синхронизированы, а разработка будет продолжаться в стиле "сначала код".Обновление модели
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT