繁体   English   中英

Entity Framework Core 2.1,使用代码优先迁移重命名表而不删除和创建新表

[英]Entity Framework Core 2.1, rename table using code-first migrations without dropping and creating new table

我将 .netcoreapp 2.1 与 EF Core 2.1 一起使用,并使用数据迁移更新我的数据库,但在重命名表时遇到了问题。 我这里的主要问题是一个表(以及后来可能的列)可能会用数据重命名多次,我希望能够重命名它们,同时保持这些数据完好无损,但从我读过的内容来看,这些迁移似乎只关心保持架构是最新的。

此问题类似于使用 Entity Framework Core 2.0 在不丢失数据的情况下更改或重命名列名,但由于我的过程是自动化的,因此我需要能够使用 do.net.exe 在命令行上使用迁移本身来执行此操作。

为此,我将下面的参数传递给 do.net.exe,构建解决方案,从 DLL 获取数据库上下文,然后使用下面的行运行迁移。

ef migrations add "someMigrationName"

...并更新数据库

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

例如,如果名为“Courases”的表开始收集数据,我需要能够在不影响数据的情况下将其重命名为“Courses”,但是目前下面是迁移中生成的 Up function。

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);
            });

    }

从我读过的内容来看,似乎没有办法生成一个表重命名而不是删除和重新创建的迁移,但这看起来很疯狂,有没有办法做到这一点/是否有一个标志我可以传递给 do.net.exe我错过了什么?

我在 EF Core 5.0 中使用dotnet ef migrations add命令遇到了同样的问题。 它想删除表并重新创建它们,这意味着我将丢失所有数据。

我试图添加一个新表并重命名其中的一些。 它显然不喜欢那样,我把它分成 2 次迁移。 首先我添加了新表,然后我重命名了其他表。

只是想在 Entity Framework Core 中推广 Rename a foreign key 而不会删除数据作为这个问题的顶级答案——正如其他评论者指出的那样,这是最好的答案,因为它让 EF 自己正确地创建迁移。 不要被标题的措辞拖延:这个答案涵盖了在 EF Core 中重命名实体及其基础表,并且从 EF Core 7 开始仍然适用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM