为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕仙森 2021-10-31 18:44:17
我将 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 的标志,我错过了吗?
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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

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


查看完整回答
反对 回复 2021-10-31
  • 2 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信