Mysql
 sql >> база данни >  >> RDS >> Mysql

Атомно увеличение с Entity Framework

С Entity Framework не можете да направите това "атомна" операция. Имате следните стъпки:

  1. Зареждане на обект от база данни
  2. Промяна на брояча в паметта
  3. Запазване на променен обект в база данни

Между тези стъпки друг клиент може да зареди обекта от базата данни, който все още има старата стойност.

Най-добрият начин да се справите с тази ситуация е да използвате оптимистичен паралелност . Това по същество означава, че промяната в стъпка 3 няма да бъде запазена, ако броячът вече не е същият, който беше, когато сте заредили обекта в стъпка 1. Вместо това ще получите изключение, с което можете да се справите, като презаредите обекта и повторно прилагане на промяната.

Работният процес би изглеждал така:

  • В Work обект WordCount свойството трябва да бъде маркирано като маркер за едновременност (анотации или Fluent API в случай на Code-First)
  • Зареждане на обект от база данни
  • Промяна на брояча в паметта
  • Обадете се на SaveChanges в try-catch блокиране и улавяне на изключения от тип DbUpdateConcurrencyException
  • Ако възникне изключение, презаредете обекта в catch блокирайте от базата данни, приложете промяната отново и извикайте SaveChanges отново
  • Повтаряйте последната стъпка, докато вече не се случи изключение

В този отговор можете да намерите примерен код за тази процедура (използвайки DbContext ).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqldump работи ли надеждно с двоични данни?

  2. mysql персонализирана глобална дефинирана променлива

  3. Проблеми при използването на MySQL конектора с Django 1.8

  4. Как да повторя обекта Yii CActiveDataProvider?

  5. Обектът не може да бъде преобразуван в низ в MySQLi PHP