在不使用删除级联的情况下删除父记录和子记录

时间:2018-09-17 14:21:27

标签: c# sql-server linq parent-child parent

那么,让我们开始讨论。我有一个项目,用户可以在其中删除数据库中的记录,但是当然,如​​果删除父记录,则会出错,因为它在另一个表中有子记录。因此,我想做的就是删除父记录,并且在删除它时,子记录中包含父键或主键的所有行也将被删除,而无需使用层叠。

以下是示例代码:

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,但是还有其他东西可以用来删除子记录而不使用它吗?

1 个答案:

答案 0 :(得分:1)

使用Cascade Delete是最简单的方法,但是我同意这不是一个好的解决方案,因为您无法控制哪些子表可以删除,哪些子表不能删除。

所以您还有2个选择:

  1. 删除客户端中子表中的行,然后再删除主表(当然是在同一笔交易中)
  2. 删除instead of trigger中的子表(和主表行)中的行

后者的优点是可以在数据库端再次完成,并且像其他解决方案一样,还可以控制哪些表可以删除,哪些表不能删除。
如果愿意,您甚至可以在其中添加一些额外的支票。