Я использую LINQ to SQL, и у меня возникла небольшая проблема, увеличивающая кросс-соединение счетчика просмотров.
Небольшой фрагмент кода, который я использую:
t = this.AppManager.ForumManager.GetThread(id);
t.Views = t.Views + 1;
this.AppManager.DB.SubmitChanges();
Сейчас в моих тестах я запускаю это несколько раз, не одновременно. Всего существует 4 копии объекта, выполняющего этот тест.
То есть, нет проблемы с блокировкой или что-то в этом роде, но есть 4 контекста данных.
Теперь я ожидаю, что это будет работать так: извлекать строку, изменять поле, обновлять строку. Однако это вызывает исключение ChangeConflictException.
Почему изменение будет конфликтовать, если ни одна из его копий не запущена одновременно?
Есть ли способ игнорировать конфликты изменений в определенной таблице?
РЕДАКТИРОВАТЬ: Нашел ответ:
Вы можете установить «UpdateCheck = Никогда» во всех столбцах таблицы, чтобы создать стиль обновления «последний при выигрыше». Это то, что приложение использовало до того, как я перенес его в LINQ, поэтому я буду использовать его сейчас.
EDIT2: Хотя мое исправление, приведенное выше, действительно предотвращало создание исключения, оно не решало основную проблему:
Поскольку у меня более одного контекста данных, в итоге получается более одной кэшированной копии каждого объекта. Должен ли я воссоздавать свой контекст данных при каждой загрузке страницы?
Я бы скорее поручил контексту данных забыть все. Это возможно?