猿问

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

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


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


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


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 的标志,我错过了吗?


慕仙森
浏览 188回答 2
2回答

慕雪6442864

我在使用dotnet ef migrations add命令的EF Core 5.0 中遇到了同样的问题。它想删除表并重新创建它们,这意味着我将丢失所有数据。我试图添加一个新表并重命名其中的一些。它显然不喜欢那样,我把它分成 2 次迁移。首先我添加了新表,然后我重命名了其他表。
随时随地看视频慕课网APP
我要回答