Команда 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");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(name: "Cars");
migrationBuilder.DropTable(name: "Make");
}
}
Как видите, метод Up()
Down() удаляет созданные элементы. По мере необходимости механизм миграции будет выдавать операторы alter, add и drop, чтобы гарантировать соответствие базы данных вашей модели.Конструирующий файл содержит два атрибута, которые связывают частичные определения с именем файла и классом, производным от DbContext
[DbContext(typeof(ApplicationDbContext))]
[Migration("20201230020509_One2Many")]
partial class One2Many
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
...
}
}
Первая миграция создает внутри целевого каталога дополнительный файл, именуемый в соответствии с производным от DbContext
<ИмяПроизводногоОтDbContextКласса>ModelSnapshot.cs. Этот файл имеет формат, совпадающий с форматом конструирующего файла, и содержит код, который представляет собой итог всех миграций. При добавлении или удалении миграций данный файл автоматически обновляется, чтобы соответствовать изменениям.На заметку!
Крайне важно не удалять файлы миграций вручную. Удаление приведет к тому, что файл<ИмяПpoизвoднoгoOтDbContextKлacca>ModelSnapshot.cs утратит синхронизацию с вашими миграциями, по существу нарушив их работу. Если вы собираетесь удалять файлы миграций вручную, тогда удалите их все и начните сначала. Для удаления миграции используйте команду remove, которая будет описана ниже.Исключение таблиц из миграций