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