LINQ to SQL не вызывает DELETE - PullRequest
       22

LINQ to SQL не вызывает DELETE

1 голос
/ 02 сентября 2010

Я удаляю кучу записей из разных таблиц, которые связаны с внешними ключами.Когда я вызываю 'SubmitChanges', появляется следующая ошибка:

Оператор DELETE конфликтует с ограничением REFERENCE FK_PTXProductMap_CustomerProduct ". Конфликт произошел в базе данных" SOTI ", таблица" dbo.PTXProductMap ", столбец 'InstanceId '. Оператор был прерван.

Я посмотрел с профилировщиком, какие запросы выполняются, когда SubmitChanges пытается сохранить изменения, а операция DELETE SQL не вызывается для 2 записей. Я на 100% уверен, что linq2sql-Для них вызывается операция «DELETE» (я поставил точку останова на строку:

IEnumerable<CustomerProduct> products = DbContext.CustomerProducts
    .Where(cp => cp.InstanceId == transition.InstanceId 
            || cp.InstanceId == transition.PreInstanceId);
foreach (CustomerProduct cp in products)
{
    DbContext.CustomerProducts.DeleteOnSubmit(cp);
}

и проверил, вызывается ли она для требуемого объекта cp. DELETE вызывается для 2 другой записи из той же таблицы.... но не для всех необходимых

У вас есть идеи, почему это произошло? И как это решить?

Любые идеи приветствуются.

PS Я работаю сVS2008 SP1, MS SQL 2005 под 64-битной Windows 7

PPS Я обнаружил несколько записей в другой таблице, которые были связаны с DelУказанная область ... в том числе их удаление разрешило текущую ошибку, но до сих пор неясно, почему не была сгенерирована операция «УДАЛИТЬ» для ВСЕХ записей, которые нужно удалить.

PPPS Довольно похожая ситуация для другой пары таблиц: таблица Aсодержит 1 запись, таблица B - 3 записи, которые относятся к A.1. Их невозможно удалить за одну транзакцию, но если я удаляю их вручную (через Management Studio), я могу удалить 3 записи из B и затем записатьот ... ПОЧЕМУ?

1 Ответ

1 голос
/ 03 сентября 2010

Эта статья о DeleteOnSubmit содержит примечание, касающееся каскадного удаления.Мы рекомендуем сначала удалить дочерние строки, затем не должно быть проблем с удалением родительских объектов.

...