我们在最近从 .NET5 迁移到 .NET8 和 EF 6 的项目中采用了模型优先方法。我们的模型有一个与 SQL Server 临时表相关的实体。
当我们想要重命名实体中的列/属性时,就会出现问题。迁移脚本是通过调用
sp_rename
存储过程生成的,但我们得到:
Microsoft.Data.SqlClient.SqlException (0x80131904):EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 1,当前计数 = 0。
我认为这个脚本没有处理相关时态表也必须迁移的事实。
我们生成迁移脚本并尝试将其直接应用到数据库,显然我们得到了相同的错误。
这是一个全新的专栏,因此我们决定删除它并重新创建它,但在不同的上下文中这是不可能的。
对此有什么想法吗?
这是我想到的一个可能的解决方案。关键步骤是禁用系统版本控制,应用架构更改,然后重新启用系统版本控制。
ALTER TABLE YourMainTable SET (SYSTEM_VERSIONING = OFF);
sp_rename 'YourMainTable.OldColumnName', 'NewColumnName', 'COLUMN';
sp_rename 'YourHistoryTable.OldColumnName', 'NewColumnName', 'COLUMN';
ALTER TABLE YourMainTable
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.YourHistoryTable, DATA_CONSISTENCY_CHECK = ON));
我希望这有帮助。