从LINQ DB中删除是否还删除具有外键关联的其他表中的记录?

时间:2010-01-05 21:45:59

标签: c# sql-server linq submitchanges

因此,在我的数据库的根目录中,我有一个表“客户”。客户有外键到约6-7个其他表,如收据,地址,文档等。如果我要使用SubmitChanges()删除客户,是否会查找具有外键关联的所有记录并删除它们,或者我需要做6个查询吗?

2 个答案:

答案 0 :(得分:2)

只有在您使用级联删除(即on delete cascade)设置数据库表时才会发生这种情况。

有关详细信息,请参阅Insert, Update, and Delete Operations (LINQ to SQL)

  

LINQ to SQL不支持或   识别级联删除操作。   如果要删除表中的行   对你有所限制   必须设置ON DELETE CASCADE   规则中的外键约束   数据库,或使用您自己的代码   首先删除那些子对象   阻止父对象   删除。否则,例外是   抛出。

答案 1 :(得分:0)

你对那些外键关系有什么样的级联行动?

默认情况下,大多数数据库系统(包括我假设您使用的SQL Server)都没有任何“ON DELETE CASCADE”或任何其他操作 - 所以在这种情况下,不会发生任何事情。

此T-SQL查询将显示您的外键关系以及是否已定义任何DELETE或UPDATE引用操作:

SELECT
    name 'FK Constraint',
    OBJECT_NAME(parent_object_id) 'Parent table',
    OBJECT_NAME(referenced_object_id) 'Referenced table',
    delete_referential_action ,
    delete_referential_action_desc ,
    update_referential_action ,
    update_referential_action_desc 
FROM 
    sys.foreign_keys

如果您想要某些事情发生,您需要确保将这些FK关系设置为使用这些级联操作。

有关详细信息,请参阅Cascading Referential Integrity Constraints上的MSDN文档。