LINQ к SQL: разрешение Параллелизма

RFC для HTTP 1.1 говорит, что правильный метод состоит в том, чтобы добавить HTTP-заголовок для:

Управление Кэша: без кэшей

Более старые браузеры могут проигнорировать это, если они не правильно совместимы к HTTP 1.1. Для тех можно попробовать заголовок:

Прагма: без кэшей

Это, как также предполагается, работает на браузеры HTTP 1.1.

5
задан akf 24 September 2009 в 23:22
поделиться

2 ответа

Вы можете обнаружить и решить свои проблемы параллелизма, перехватив исключение ChangeConflictException :

using (var db = new MyDataContext())
{
    var root = (from post in db.Post
                where post.Id == rootPostId
                select post).Single();

    root.LastActivityUtc = DateTime.UtcNow;

    try
    {
        db.SubmitChanges();
    }
    catch (ChangeConflictException)
    {
        db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);
        db.SubmitChanges();
    }
}

С RefreshMode .KeepChanges вы сохраните все изменения вашего объекты клиентов и изменения других пользователей в других полях будут объединены.

Рекомендуемые статьи:

6
ответ дан 14 December 2019 в 13:43
поделиться

Похоже, это хороший кандидат для хранимой процедуры. Вместо выбора / обновления создайте простую хранимую процедуру, которая выполняет следующее:

UPDATE Post SET LastActivityUtc = GETUTCDATE () WHERE Id = @ id

Передайте идентификатор хранимой процедуре и вызывайте ее всякий раз, когда вы хотите обновить последнее действие сообщения.

0
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: