如何防止SQL中的删除查询

如何防止SQL中的删除查询,sql,entity-framework,Sql,Entity Framework,我已经通过实体框架代码优先的方法创建了一个数据库,我的应用程序已经准备好并正在运行。问题是,在创建数据库时,我没有在级联删除上启用“False”。 现在,如果我通过foreign从一个表中删除与另一个表引用的任何记录,那么包含已删除行的外键的所有记录都将从另一个表中删除。 实际演示: 假设我有一张名为乘客的桌子: ID Name CategoryID 1 ABC 1 CategoryID这是一个外键 这是分类表 ID Name 1 G

我已经通过实体框架代码优先的方法创建了一个数据库,我的应用程序已经准备好并正在运行。问题是,在创建数据库时,我没有在级联删除上启用“False”。 现在,如果我通过foreign从一个表中删除与另一个表引用的任何记录,那么包含已删除行的外键的所有记录都将从另一个表中删除。 实际演示:

假设我有一张名为乘客的桌子:

ID     Name    CategoryID
1      ABC         1
CategoryID这是一个外键

这是分类表

ID    Name   
1     Gold
假设我在category表上运行查询

delete from Category where ID = 1
现在,我的乘客表中的所有记录都被删除。我想限制它。现在可以通过SQL实现吗

我想 :


希望这对您有所帮助。:)

是的,您可以通过更改逻辑来防止删除。如果某个类别不再使用,您可以将其停用。将布尔字段添加到
Category
表中,比如说
Active
,然后使用
Update
语句。例如:
updatecategory Set Active='false'
@MaciejLos在我的实际应用程序中,我已经实现了这个逻辑,我有一个bool属性,通过应用程序接口,如果有人要删除任何特定的记录,该属性将是“true”。我问的是,如果有人通过mistak对sql运行查询,会怎么样。。然后,它将删除该记录以及所有引用的记录。。这就是我想要限制的,你应该禁止那个人管理你的数据库:)请注意EF也会对级联删除规范起作用。如果在映射中为true,那么它将假定数据库会处理它,并且不会为子记录发出delete语句。因此,如果要更改数据库,必须确保代码中没有子记录与其父记录一起被删除的情况。@Faizan Eh。。。这将阻止所有删除。您将永远无法删除任何
乘客
,即使您尝试直接删除。这真的是你们想要的吗?实际上我已经通过添加bool值的接口实现了软删除功能。我得到的只是那些bool属性为false的乘客的列表。因此,如果有人想删除任何乘客,他们可以将其删除,而在幕后,我只是将其bool属性从false更新为true,这样用户就看不到了。我真正想要的是限制任何人在sql上运行delete查询,这对我来说很好
alter TRIGGER customers_del_prevent
ON dbo.customers 
INSTEAD OF DELETE
AS
BEGIN
 insert into dbo.log
    values ('DELETE')   
 RAISERROR ('Deletions not allowed from this table (source = instead of)', 16, 1)   
 END