У меня есть модель на основе EF.Core 2 с SQL Сервером в качестве серверной части. Одно из полей (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
класса, он работает нормально. Но у меня есть несколько таких столбцов, и я бы предпочел не удалять (а затем добавлять) индексы