实体框架代码优先 - 删除列由于外键而被阻止

问题描述 投票:0回答:1

我正在尝试从表中删除一列,我从模型类中删除了该列并运行迁移命令,并生成了此 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
sql-server ef-code-first entity-framework-migrations
1个回答
0
投票

由于您想要删除列

ID_COLUMN_PARENT
,您需要首先删除外键约束
FK_PRODUCT_PRODUCT
。您在问题中回避了了解这一点。这需要两个声明。

alter table PRODUCT drop constraint FK_PRODUCT_PRODUCT;
alter table PRODUCT drop column ID_PRODUCT_PARENT;

在您的问题中,您听起来担心这可能会导致问题。不确定它可能会导致什么问题,但它们将是应用程序的逻辑问题,而不是数据库的逻辑问题。

© www.soinside.com 2019 - 2024. All rights reserved.