Кажется, работает и для моей ситуации. Я строил в памяти, никогда ранее не передавал строки, которые имели несколько связей внешнего ключа со строками в других таблицах. Кажется, что InsertOnSubmit работает, но последующий DeleteOnSubmit сообщал мне, что строка не найдена. Я не заполнял каждое поле в строке, которую я отправил, поэтому я не знаю, было ли это как-то связано с этим, но пометка всех столбцов неосновного ключа основной таблицы устранила сообщение об ошибке.
Еще одна мысль: я полагаю, что пометка политики UpdateCheck столбца как «Никогда» означает, что она не используется в качестве основы для оптимистичной проверки совпадений. Это будет означать, что два пользователя могут записывать в данную строку с разными данными в любом таком столбце, и конфликты не будут обнаружены ... это означает, что последний пользователь, отправивший строку, перезапишет значения, представленные предыдущими пользователями. Из различных онлайн-чтений я понял, что одним из частичных решений этого является использование метода Refresh непосредственно перед отправкой для синхронизации любых изменений. Конечно, без пессимистической блокировки строки нет гарантии, что строка все равно не будет изменена между Refresh и Submit, но в большинстве сценариев с большими базами данных это будет редко.
Обновление: при дальнейшем рассмотрении я думаю, что обнаружил сценарий, который может повлиять на других, поэтому я решил поделиться им на всякий случай. Оказывается, что, по крайней мере, часть проблем, с которыми я столкнулся с SQL LINQ, связана с триггерами. Похоже, что если вы отправляете строку, используя SQL LINQ, и у вашего администратора есть триггеры, предназначенные для записи информации в некоторые столбцы в этой строке, то модель SQL LINQ по умолчанию будет «Всегда» определять, что строка была изменена с момента вашей последней записи в нее. , Я отправлял частично заполненные строки, и триггеры нашего администратора баз данных заполняют некоторые столбцы, поэтому, когда я попытался дополнительно изменить строку в нашем коде, он обнаружил конфликт изменений, основанный на столбцах, заполненных триггером. Сейчас я изучаю лучший способ справиться с этим, но изменение этих полей, заполненных триггерами, на использование политики UpdateCheck «Когда изменено» или «Никогда» сработало для меня. Надеюсь, это поможет.