Для команд CLI глобального инструмента EF Core, которым требуется экземпляр класса, производного от DbContext
Database и Migrations), при наличии в проекте только одного такого экземпляра именно он и будет использоваться. Если экземпляров DbContext несколько, тогда конкретный экземпляр необходимо указывать в параметре командной строки. Экземпляр производного от DbContext класса будет создаваться с применением экземпляра класса, реализующего интерфейс IDesignTimeDbContextFactory, если инструмент смог его обнаружить.Если инструменту не удалось его найти, то экземпляр класса, производного от DbContext
OnConfiguring, что не считается хорошей практикой.Лучший (и на самом деле единственный) вариант — всегда создавать реализацию IDesignTimeDbContextFactory
DbContext, который присутствует в приложении.Чтобы вывести список всех аргументов и параметров для команды, введите dotnet ef <команда> -h
dotnet ef migrations add -h
На заметку!
Важно отметить, что команды CLI — это не команды С#, а потому правила отмены символов обратной косой черты и кавычек здесь не применяются.Команды для управления миграциями
Команды migrations
__EFMigrationsHistory создается запись. Команды для управления миграциями кратко описаны в табл. 22.11 и более подробно в последующих подразделах.Команда add
Команда add
DbSet в производном от DbContext классе (и каждую сущность, которая может быть достигнута из таких сущностей с использованием навигационных свойств) и выясняет, есть ли какие-то изменения, которые должны быть применены к базе данных. При наличии изменений генерируется надлежащий код для обновления базы данных. Вскоре вы узнаете об этом больше.Команда add
-о <путь> или --output-dir <путь> указывает, куда должны помещаться файлы миграции. Стандартный каталог называется Migrations и относителен к текущему пути.Для каждой добавленной миграции создаются два файла с частичными определениями того же самого класса. Имена обоих файлов начинаются с отметки времени и наименования миграции, которое было указано в качестве параметра для команды add
<ГГГГММДДЧЧММСС>_<НаименованиеМиграции>.cs, а второй — <ГГГГММДДЧЧММСС>_<НаименованиеМиграции>.Designer.cs. Отметка времени основана на том, когда файл был создан, и в точности совпадает для обоих файлов. Первый файл представляет код, сгенерированный для изменений базы данных в этой миграции, а конструирующий файл — код, который предназначен для создания и обновления базы данных на основе всех миграций до этой миграции включительно.Главный файл содержит два метода, Up
Down. В методе Up находится код для обновления базы данных с учетом изменений этой миграции. В методе Down содержится код для выполнения отката изменений этой миграции. Ниже приведен неполный листинг начальной миграции, рассматриваемой ранее в главе (One2Many):public partial class One2Many : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Make",
columns: table => new
{
Id = table.Column
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column
TimeStamp = table.Column
nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Make", x => x.Id);
});
...
migrationBuilder.CreateIndex(
name: "IX_Cars_MakeId",
table: "Cars",
column: "MakeId");
}
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT