我有基于EF.Core 2的模型,其中SQL Server作为后端。字段(Delete_Flag
)曾经是int
,我想将其更改为bool
。另外,在此字段上定义了一个索引。因此,在添加迁移时,将生成并执行以下SQL(CrForce
是表的名称):
DECLARE @var0 sysname;
SELECT @var0 = [d].[name]
FROM [sys].[default_constraints] [d]
INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id]
WHERE ([d].[parent_object_id] = OBJECT_ID(N'[CrForce]') AND [c].[name] = N'Delete_Flag');
IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [CrForce] DROP CONSTRAINT [' + @var0 + '];');
ALTER TABLE [Crime_Force] ALTER COLUMN [Delete_Flag] bit NOT NULL;
问题是SELECT
语句不返回数据,并且DROP CONSTRAINT
没有运行。但是,有一个索引;因此,当运行ALTER TABLE
时,出现以下错误:
The index 'IX_CrForce_Delete_Flag' is dependent on column 'Delete_Flag'.
ALTER TABLE ALTER COLUMN Delete_Flag failed because one or more objects access this column.
该错误是有道理的,但是为什么不首先取消约束?
顺便说一句,如果我明确地从我的DbContext
派生类中删除索引,它就可以正常工作。但是我有很多这样的列,我宁愿不要删除(然后添加)索引