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

Я удаляю кучу записей из разных таблиц, связанных внешними ключами. Когда я вызываю «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-х других записей из той же таблицы... но не для всех требуемых

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

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

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

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

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


person Budda    schedule 02.09.2010    source источник


Ответы (1)


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

person Devart    schedule 03.09.2010
comment
Да, я сначала удаляю дочерние строки... Это не помогает. Спасибо за ссылку. - person Budda; 03.09.2010