web-dev-qa-db-ja.com

Entity Framework Core 2.1、新しいテーブルを削除して作成せずに、コードファーストの移行を使用してテーブルの名前を変更します

EF Core2.1でnetcoreapp2.1を使用していて、データ移行でデータベースを更新していますが、テーブルの名前変更で問題が発生しました。ここでの私の主な問題は、テーブル(および後で潜在的に列)の名前がデータで複数回変更される可能性があり、このデータをそのまま維持しながら名前を変更できるようにしたいのですが、私が読んだところによると、これらの移行は維持にのみ関係しているようです最新のスキーマ。

この問題は Entity Framework Core 2.0でデータを失うことなく列名を変更または名前変更する に似ていますが、プロセスが自動化されているため、dotnetを使用してコマンドラインで移行自体を使用してこれを実行できる必要があります。EXE。

これを行うには、以下の引数をdotnet.exeに渡し、ソリューションを構築し、DLLからDBコンテキストを取得して、その下の行で移行を実行します。

ef migrations add "someMigrationName"

...そしてデータベースを更新する

var migrator = dbContext.Database.GetService<IMigrator>();
migrator.Migrate();

例として、「Courases」という名前のテーブルがデータの収集を開始した場合、データに影響を与えずに「Courses」という名前に変更できるようにする必要がありますが、現在、以下は移行で生成されたUp関数です。

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "Courases");

        migrationBuilder.CreateTable(
            name: "Courses",
            columns: table => new
            {
                Id = table.Column<Guid>(nullable: false),
                ConcurrencyCheck = table.Column<byte[]>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Courses", x => x.Id);
            });

    }

私が読んだことから、削除して再作成するのではなく、名前を変更したテーブルで移行を生成する方法はないようですが、これはおかしいようです、これを行う方法はありますか/dotnet.exeに渡すことができるフラグがあります逃した?

6
James Morrison

チェックアウト https://docs.Microsoft.com/en-us/dotnet/api/Microsoft.entityframeworkcore.migrations.migrationbuilder.renametable?view=efcore-2.1

あなたは単にmigrationBuilder.RenameTable( "Old"、null、 "New");を呼び出すことができます。

4
Tom McClean