对临时表应用重命名迁移会出现 SqlException (0x80131904) BEGIN 和 COMMIT 语句数量不匹配

问题描述 投票:0回答:1

我们在最近从 .NET5 迁移到 .NET8 和 EF 6 的项目中采用了模型优先方法。我们的模型有一个与 SQL Server 临时表相关的实体。

当我们想要重命名实体中的列/属性时,就会出现问题。迁移脚本是通过调用

sp_rename
存储过程生成的,但我们得到:

Microsoft.Data.SqlClient.SqlException (0x80131904):EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 1,当前计数 = 0。

我认为这个脚本没有处理相关时态表也必须迁移的事实。

我们生成迁移脚本并尝试将其直接应用到数据库,显然我们得到了相同的错误。

这是一个全新的专栏,因此我们决定删除它并重新创建它,但在不同的上下文中这是不可能的。

对此有什么想法吗?

.net sql-server entity-framework database-migration temporal-tables
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));

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.