2013-06-21 3 views
8

В нашем приложении EF 5, когда мы получаем ошибку блокировки SQL Server при вставке или обновлении, мы сразу же снова пытаемся выполнить операцию. Однако, когда мы пытаемся сделать так, мы получаем следующее сообщение об ошибке:Entity Framework 5 - «Обнаруженные конфликтующие изменения»

"Conflicting changes detected. This may happen when trying to insert multiple entities with the same key." 

Эта ошибка не приходит из SQL Server. Это ошибка EF 5. И мы не пытаемся вставить несколько объектов с одним и тем же ключом. IOW, мы не пытаемся вставить повторяющуюся строку. Однако я подозреваю, что эта ошибка означает что-то еще. Но я не совсем уверен, что знаю, в чем проблема. Если бы мне пришлось догадаться, я бы сказал, что с первой попытки EF видит, где пытаться вставить объект. Он терпит неудачу из-за тупика. Когда мы снова попытаемся снова, EF думает, что мы пытаемся повторить ту же операцию снова с тем же ключом и не нравится. Не знаете, как обойти это.

+0

С какой скоростью вы получаете взаимоблокировки? 1 в 10 000? Более регулярно? – qujck

+8

'IOW' =" Другими словами ". (В случае, если я не единственный, кто это делает, и если я хорошо знаю, я не вижу, чтобы он часто использовался, я думаю). –

+0

@qujck - Возможно 1 в 5K. Сложно сказать. Это многопользовательское приложение, использующее множество вложений. Я не уверен, почему это имеет значение в отношении моего вопроса. –

ответ

10

Похоже, что вы пытаетесь выполнить свои запросы против одного экземпляра DbContext. В этом случае ваши изменения уже ожидаются с последней попытки.

Поскольку в контексте нет «отмены ожидающих изменений», вы должны избавиться от контекста между «повторениями» и воссоздать контекст.