我正在尝试从表中删除一列,我从模型类中删除了该列并运行迁移命令,并生成了此 SQL 脚本:
DECLARE @var0 nvarchar(128)
SELECT @var0 = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(N'dbo.PRODUCT)
AND col_name(parent_object_id, parent_column_id) = 'ID_PRODUCT_PARENT';
IF @var0 IS NOT NULL
EXECUTE('ALTER TABLE [dbo].[PRODUCT] DROP CONSTRAINT [' + @var0 + ']')
ALTER TABLE [dbo].[PRODUCT]
DROP COLUMN [ID_PRODUCT_PARENT]
INSERT [dbo].[__MigrationHistory]--------------------------------------------------XXXX
当我运行命令
update-database -Verbose
时,我收到此错误:
对象“FK_PRODUCT_PRODUCT”依赖于列“ID_PRODUCT_PARENT”。
ALTER TABLE DROP COLUMN ID_PRODUCT_PARENT 失败,因为一个或多个对象访问此列
我检查了表,当我展开键时,我看到了
FK_PRODUCT_PRODUCT
,但不确定为什么 SQL 没有生成删除该键的脚本。
如何解决这个问题?我担心如果我从桌子上手动删除
FK_PRODUCT_PRODUCT
可能会导致问题。
当我尝试右键单击 FK_Product_Product 键并查看脚本时,如下所示。
ALTER TABLE [dbo].[PRODUCT] WITH CHECK AND CONSTRAINT [FK_PRODUCT_PRODUCT] FOREIGN KEY([ID_PRODUCT_PARENT]) REFERENCES [dbo].[PRODUCT] ([ID_PRODUCT])
GO
ALTER TABLE [dbo].[PRODUCT] CHECK CONSTRAINT [FK_PRODUCT_PRODUCT]
GO
由于您想要删除列
ID_COLUMN_PARENT
,您需要首先删除外键约束 FK_PRODUCT_PRODUCT
。您在问题中回避了了解这一点。这需要两个声明。
alter table PRODUCT drop constraint FK_PRODUCT_PRODUCT;
alter table PRODUCT drop column ID_PRODUCT_PARENT;
在您的问题中,您听起来担心这可能会导致问题。不确定它可能会导致什么问题,但它们将是应用程序的逻辑问题,而不是数据库的逻辑问题。