我正在使用 ASP.NET Core 8 Web API、SQL Server 和身份框架开发一个网站。该数据库包含各种表,例如 AspNetUsers、AspNetRoles、AspNetUserRoles、Brands 等。由于我已经用真实数据填充了数据库,因此我不想删除该表。当我需要修改数据库时,我通常使用命令行。但是,每次更新表时,AspNetUserRoles 表都会被清除。如何保留 userRoles 表中的数据?
这是我尝试过的命令行。
dotnet ef migrations add updateUserTable
dotnet ef database update
执行这些命令行后有 userRoles 表,但 userRoles 表为空。 我正在使用 VSCode 作为开发工具。
该问题可能与 Entity Framework Core (EF Core) 迁移有关,在执行新迁移以更新其他表时,该迁移不会在 userRoles 表中保存数据这是使用 EF Core 重定位进行迁移时的常见问题,特别是在您所做的架构更改不会影响他们感兴趣的现有数据的情况下。
在迁移时保留 userRoles 表中的数据的一种可能的解决方案是手动指定要对其他表进行更改的迁移脚本,从这些脚本中提取 userRoles 表,然后在其他表上运行迁移工作,而不进行必要的更改.
这是您可以尝试的分步食谱:
为每个更改创建新的迁移:不要使用 dotnet ef migrations add 命令自动执行迁移,而是手动为您想要对除用户角色之外的表进行的任何更改创建迁移 从迁移中删除 userRoles:在任何手动迁移中,请确保不向 userRoles 表添加更改。您可以通过从迁移文件中的 Up() 和 Down() 方法中删除与用户角色表相关的任何分配来完成此操作。 对其他表应用迁移:创建和修改其他表上的更改的迁移后,使用 dotnet ef 数据库更新命令应用这些迁移,这将更新数据库架构,而不会影响 userRoles 表。 手动更新用户角色表:应用迁移后,使用 SQL 脚本或专门针对用户角色表的 EF Core 迁移手动对用户角色表进行任何必要的更改确保这些更改不会被删除或撤消