首先删除带有种子数据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属性而产生的。)

我知道的仅有的两种解决方案是:

  • 更新以前的迁移,删除该列的种子数据。 (更新自动生成的代码:()
  • 更新我的构建,并使用-from -to ef核心属性(限制版本部署:()

还有其他想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...