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