Удалить родительские и дочерние записи без использования каскада удаления - PullRequest
0 голосов
/ 17 сентября 2018

Итак, давайте перейдем к делу.У меня есть проект, где пользователь может удалить записи из базы данных, но, конечно, если я удаляю родительскую запись, я получу ошибку, потому что у него есть дочерние записи в другой таблице.Итак, я хочу удалить родительские записи, и когда я удаляю их, все строки в дочерних записях, которые включают родительский ключ или первичный ключ, также удаляются без использования каскада.

Вот код для примера:

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 голосов
/ 17 сентября 2018

Использование Cascade Delete было бы самым простым, но я согласен, что это не очень хорошее решение, так как вы не можете контролировать, какие дочерние таблицы могут быть удалены, а какие нет.

Таким образом, у вас осталось 2 варианта:

  1. Удалите строки в дочерних таблицах вашего клиента перед удалением мастера (в той же транзакции вне курса)
  2. Удалите строки в дочерних таблицах (и строки мастер-таблицы)) в instead of trigger

Последнее имеет преимущество в том, что оно выполняется на стороне базы данных, и, как и другие решения, также дает вам контроль над тем, какие таблицы могут быть удалены, а какие нет.
Вы можете даже добавить дополнительные проверки, если хотите.

...