Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Если инструменту не удалось его найти, то экземпляр класса, производного от
DbContext
OnConfiguring()
Лучший (и на самом деле единственный) вариант — всегда создавать реализацию
IDesignTimeDbContextFactory<TContext>
DbContext

Чтобы вывести список всех аргументов и параметров для команды, введите
dotnet ef <команда> -h
dotnet ef migrations add -h
На заметку! Важно отметить, что команды CLI — это не команды С#, а потому правила отмены символов обратной косой черты и кавычек здесь не применяются.
Команды для управления миграциями
Команды
migrations
__EFMigrationsHistory

Команда add
Команда
add
DbSet<T>
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<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(max)", nullable: true),
TimeStamp = table.Column<byte[]>(type: "varbinary(max)",
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