Казалось, что для моей ситуации тоже. Я создавал в памяти, никогда ранее не представленную строку, которая имела несколько внешних ключей для строк в других таблицах.Возможно, InsertOnSubmit работал, но последующий DeleteOnSubmit давал мне эту строку, которая не обнаружила ошибку. Я не заполнял каждое поле в строке, которую я отправил, поэтому я не знаю, имело ли это какое-либо отношение к ней, но отмечая все столбцы непервичного ключа основной таблицы, устранило сообщение об ошибке.
Еще одна мысль: я считаю, что маркировка политики UpdateCheck в столбце «Никогда» означает, что она не используется в качестве основы для оптимистической проверки соответствия. Это означало бы, что два пользователя могут писать по данной строке с разными данными в любом таком столбце, и конфликты не будут обнаружены ... что означает, что последний пользователь должен отправить строку, чтобы перезаписать значения предыдущей заявки пользователя. Из различных онлайн-показаний я понял, что одним из частичных решений является использование метода Refresh непосредственно перед отправкой для синхронизации любых изменений. Конечно, без пезимистической блокировки в строке нет гарантии, что строка не будет изменяться между Refresh и Submit, но в большинстве сценариев, связанных с большими базами данных, это было бы редко.
Обновление: при дальнейшем рассмотрении, я думаю, что я обнаружил сценарий, который может повлиять на других, поэтому я решил поделиться им на всякий случай. Оказывается, что по крайней мере часть проблемы, с которой я столкнулась с SQL LINQ, связана с триггерами. Похоже, что если вы отправляете строку с использованием SQL LINQ, и у вашего администратора базы данных есть триггеры, предназначенные для записи информации в некоторые столбцы в этой строке, тогда модель SQL LINQ по умолчанию «Всегда» определяет, что строка была изменена с момента последней записи ее , Я отправлял частично заполненные строки, и триггеры нашего DBA заполняют некоторые столбцы, поэтому, когда я попытался изменить строку в нашем коде, он обнаружил конфликт изменений, основанный на столбцах, заполненных триггером. Сейчас я изучаю лучший способ справиться с этим, но изменение этих триггерных полей для использования политики UpdateCheck для «When Changed» или «Never» работает для меня. Надеюсь, поможет.
OK - Я только что попробовал установить Update Update для Yes, чтобы никогда ... нет радости, я все равно получаю тот же результат. – Mark
У меня была такая же проблема с некоторым обновлением поля даты и времени: изменение значения UpdateCheck решило проблему. –
+1 У меня была эта проблема с полем «float» в SQL DB, которое я сопоставил с типом «float» (single) на C#. Когда я изменил тип на «double», проблема исчезла. Но именно этот ответ меня опрокинул - так СПАСИБО! –