如何解决首先删除带有种子数据EF核心代码的列
我首先开发一个具有.Net核心,ef核心和代码的项目。该项目包含多个迁移,例如,我们有下一个迁移列表:
Migrations/
Initial
Second
Third
在初始迁移中,包含新表,新列,关系...以及一些表的种子数据。
例如:
IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'initial')
BEGIN
CREATE TABLE [Master].Colors (
[Id] int NOT NULL IDENTITY,[Name] nvarchar(255) NOT NULL,[HexadecimalValue] nvarchar(6) NULL,CONSTRAINT [PK_Colors] PRIMARY KEY ([Id])
)
END;
IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'initial')
BEGIN
SET IDENTITY_INSERT [Master].Colors ON;
INSERT INTO [Master].Colors ([Id],[Name],[HexadecimalValue])
VALUES
(1,N'Red','fff12'),(2,N'blue',(3,N'yellow','fff12');
SET IDENTITY_INSERT [Master].Colors OFF;
END;
但是在第三次迁移中,我需要删除例如[HexadecimalValue]列。迁移脚本已生成:
IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'third')
begin
ALTER TABLE [Master].Colors DROP COLUMN [HexadecimalValue];
END;
一切似乎都可以,如果您运行这些查询示例,则不会有任何问题。问题是您不止一次运行它。当我的发布管道一次又一次地部署新版本时,我的脚本会引发错误,因为没有“ [HexadecimalValue]”列,并且sql Server会检查是否所有对象都存在,即使不执行查询也是如此(注意if语句,是由于--idempotent属性而产生的。)
我知道的仅有的两种解决方案是:
还有其他想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。