Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Если инструменту не удалось его найти, то экземпляр класса, производного от
DbContextOnConfiguring()Лучший (и на самом деле единственный) вариант — всегда создавать реализацию
IDesignTimeDbContextFactory<TContext>DbContext
Чтобы вывести список всех аргументов и параметров для команды, введите
dotnet ef <команда> -hdotnet ef migrations add -hНа заметку! Важно отметить, что команды CLI — это не команды С#, а потому правила отмены символов обратной косой черты и кавычек здесь не применяются.
Команды для управления миграциями
Команды
migrations__EFMigrationsHistory
Команда add
Команда
addDbSet<T>DbContextКоманда
add-о <путь>--output-dir <путь>MigrationsДля каждой добавленной миграции создаются два файла с частичными определениями того же самого класса. Имена обоих файлов начинаются с отметки времени и наименования миграции, которое было указано в качестве параметра для команды
add<ГГГГММДДЧЧММСС>_<НаименованиеМиграции>.cs<ГГГГММДДЧЧММСС>_<НаименованиеМиграции>.Designer.csГлавный файл содержит два метода,
Up()Down()Up()Down()One2Manypublic 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()alteradddropКонструирующий файл содержит два атрибута, которые связывают частичные определения с именем файла и классом, производным от
DbContext