c# - 删除父子记录而不使用删除级联
问题描述
所以,让我们进入正题。我有一个项目,用户可以从数据库中删除记录,但是当然如果我删除父记录,我会收到错误,因为它在另一个表中有子记录。所以,我想要做的是我想删除父记录,当我删除它时,子记录中包含父键或主键的所有行也将被删除,而不使用级联。
这是例如代码:
if (row != -1)
{
tbl_employee.Rows.RemoveAt(row);
int id = Convert.ToInt32(txt_employeeid.Text.ToString());
employee emp = db.employees.Single(x => x.employeeid == id);
db.employees.DeleteOnSubmit(emp);
db.SubmitChanges();
}
else
{
MessageBox.Show("Click the row first!");
}
但是,我有一个错误The DELETE statement conflicted with the REFERENCE constraint
。我知道我可以使用on delete cascade
,但是有没有其他方法可以在不使用的情况下删除子记录?
解决方案
使用Cascade Delete
将是最简单的,但我同意这不是一个好的解决方案,因为您无法控制哪些子表可以被删除,哪些不能。
所以你有2个选择:
- 在删除主表之前删除客户端子表中的行(在同一事务中)
- 删除子表中的行(和主表行)
instead of trigger
后者的优点是它再次在数据库端完成,并且与其他解决方案一样,您还可以控制哪些表可以被删除,哪些不能。
如果你愿意,你甚至可以在那里放一些额外的支票。
推荐阅读
- python - 在 python 3 上手动排序列表
- macos - NSSharingService performWithItems 挂起
- wso2 - 如何在 siddhi CEP 中放置到达和摄取时间戳
- c++ - 字符串和向量的 shrink_to_fit 实现不同?
- rust - Rust 宏可以同时设置一个变量并返回一个值吗?
- c++ - c++类成员调用错误C3861
- html - HTML tile 中元素的响应式定位
- angular - Angular 无法读取组件/表单中未定义的属性
- php - 无法获取 PHP 查询以返回要制成数组的资源,我无权访问连接数据
- python-3.x - 不和谐.py | 如何让机器人根据你输入的内容说话?