所以,让我们谈谈这一点。我有一个项目,用户可以从数据库中删除记录,但当然,如果我删除父记录,我会收到一个错误,因为它在另一个表中有子记录。所以,我想要删除父记录,当我删除它时,子记录中包含父键或主键的所有行也将被删除,而不使用cascade。
以下是代码示例:
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
将是最简单的,但我同意它不是一个好的解决方案,因为你无法控制哪些子表可能被删除而哪些子表可能没有。
所以你剩下两个选择:
instead of trigger
中子表(和主表行)中的行后者的优点是它可以再次在数据库端完成,并且像其他解决方案一样,它还可以控制哪些表可以删除,哪些表不可删除。 如果你愿意,你甚至可以在那里加一些额外的支票。