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