Во-первых, где твой блок using(get_datacontext){...}
? Вам нужно избавиться от DataContext
s, когда вы закончите с ними!
В любом случае ...
Я предполагаю, что оператор update генерирует предложение where, которое слишком узкое или просто неверное.
Я бы проверял свойство «Проверка обновления» каждого столбца в вашей сопоставленной таблице в конструкторе Linq to Sql. Самое простое, что нужно сделать, это установить для столбца первичного ключа значение Always
, а для всех остальных - значение Never
. Вы также можете установить для них значение WhenChanged
.
Поведение дизайнера по умолчанию обычно устанавливает его на Always
для всего; это не только вызывает ужасные условия WHERE
для обновлений, но также может иногда вызывать проблемы. Очевидно, что такое поведение требуется для правильной проверки параллелизма (то есть два потока обновляют одну и ту же строку); так что знайте об этом.
О, если подумать о другом - вы также можете получить такое поведение, если ваша таблица не имеет первичного ключа, обозначенного в конструкторе, - убедитесь, что один из столбцов равен.
Наконец, вы можете проверить генерируемый SQL при вызове SubmitChanges
; присоединяя TextWriter к свойству DataContext.Log ; или в равной степени IntelliTrace в VS2010 будет собирать все запросы ADO.Net, которые выполняются, если вы начнете с отладки. Это неоценимо при отладке, почему вещи L2S не работают должным образом.