EF Code First Counter
От: Эолинн http://sunengine.site/
Дата: 24.12.14 16:03
Оценка:
Привет, ребята!

Вопрос такой, я хочу завести в базе счетчик посещений на некоторые страницы.
Там надо просто извлечь из базы текущее значение в контроллере или во вьюшке, и приплюсовать единичку, записать снова в базу.
Но если одновременно несколько пользователей будет заходить туда, то может получиться что в базу запишется неверное число. Так как один пока заходит, другой уже обновил базу и первый просто не учтет изменения которые сделал второй.
Как можно решить эту проблему.

Пока мысли такие что обернуть весь запрос в базу в транзакцию. Поможет ли это? Правильно ли я понимаю что если эти операции будут в транзакции, то тогда эти таблички будут залочены для всех других операций, до тех пор пока транзакция не завершится?
И есть ли какие-то штатные методы работы с такими вещами.

Еще думаю такой вариант, сделать это через SQL выражение типа Update. Но тут тоже нету полного понимание, может ли в таком случае все-таки потеряться единичка.
Отредактировано 24.12.2014 16:10 DmitrijPolianin . Предыдущая версия . Еще …
Отредактировано 24.12.2014 16:05 DmitrijPolianin . Предыдущая версия .
ef code first counter transaction
Re: EF Code First Counter
От: Qulac Россия  
Дата: 24.12.14 17:24
Оценка:
Здравствуйте, Эолинн, Вы писали:

Э>Привет, ребята!


Э>Вопрос такой, я хочу завести в базе счетчик посещений на некоторые страницы.

Э>Там надо просто извлечь из базы текущее значение в контроллере или во вьюшке, и приплюсовать единичку, записать снова в базу.
Э>Но если одновременно несколько пользователей будет заходить туда, то может получиться что в базу запишется неверное число. Так как один пока заходит, другой уже обновил базу и первый просто не учтет изменения которые сделал второй.
Э>Как можно решить эту проблему.

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


Не совсем, есть разные уровни изоляции транзакций.

Э>И есть ли какие-то штатные методы работы с такими вещами.


EF 6 позволяет выполнять изменения в транзакции. Вот пример: Entity Framework и транзакции

Для вашего случая, нужный уровень изоляции: Serializable.
Программа – это мысли спрессованные в код
Re: EF Code First Counter
От: TK Лес кывт.рф
Дата: 04.01.15 16:20
Оценка:
Здравствуйте, Эолинн, Вы писали:

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

Э>И есть ли какие-то штатные методы работы с такими вещами.

Можно использовать Optimistic Concurrency — если обновление не прошло то, просто повторить с новым значением.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: EF Code First Counter
От: catch Россия  
Дата: 10.01.15 20:39
Оценка:
Здравствуйте, Эолинн, Вы писали:

Э>Привет, ребята!


Э>Вопрос такой, я хочу завести в базе счетчик посещений на некоторые страницы.



Как насчет таблички с identity значением?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.