0

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

4

2 回答 2

2

只有当您设置数据库表以通过级联删除(即on delete cascade)来执行此操作时,才会发生这种情况。

有关更多信息,请参阅插入、更新和删除操作 (LINQ to SQL)

LINQ to SQL 不支持或识别级联删除操作。如果要删除表中存在约束的行,则必须在数据库的外键约束中设置 ON DELETE CASCADE 规则,或者使用自己的代码先删除阻止父对象的子对象对象被删除。否则,抛出异常。

于 2010-01-05T21:48:29.473 回答
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 关系设置为使用这些级联操作。

有关更多详细信息,请参阅有关级联引用完整性约束的 MSDN 文档。

于 2010-01-05T21:49:09.127 回答