Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sự gia tăng nguyên tử với Khung thực thể

Với Entity Framework, bạn không thể đặt đây là một hoạt động "nguyên tử". Bạn có các bước:

  1. Tải thực thể từ cơ sở dữ liệu
  2. Thay đổi bộ đếm trong bộ nhớ
  3. Lưu thực thể đã thay đổi vào cơ sở dữ liệu

Giữa các bước này, một ứng dụng khách khác có thể tải thực thể từ cơ sở dữ liệu vẫn có giá trị cũ.

Cách tốt nhất để đối phó với tình huống này là sử dụng đồng thời lạc quan . Về cơ bản, điều đó có nghĩa là thay đổi trong bước 3 sẽ không được lưu nếu bộ đếm không còn giống như khi bạn tải thực thể ở bước 1. Thay vào đó, bạn sẽ nhận được một ngoại lệ mà bạn có thể xử lý bằng cách tải lại thực thể và áp dụng lại thay đổi.

Quy trình làm việc sẽ giống như sau:

  • Trong Work thực thể WordCount thuộc tính phải được đánh dấu là mã thông báo đồng thời (chú thích hoặc API thông thạo trong trường hợp là Code-First)
  • Tải thực thể từ cơ sở dữ liệu
  • Thay đổi bộ đếm trong bộ nhớ
  • Gọi SaveChanges trong một try-catch chặn và bắt các ngoại lệ của loại DbUpdateConcurrencyException
  • Nếu một ngoại lệ xảy ra, hãy tải lại thực thể trong catch chặn khỏi cơ sở dữ liệu, áp dụng lại thay đổi và gọi SaveChanges một lần nữa
  • Lặp lại bước cuối cùng cho đến khi không có ngoại lệ nào xảy ra nữa

Trong câu trả lời này bạn có thể tìm thấy một ví dụ mã cho quy trình này (sử dụng 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. Tham gia nào tốt hơn, ẩn hay rõ ràng?

  2. MySQL Group By và Sum tổng giá trị của cột khác

  3. Cách tắt chế độ nghiêm ngặt của MySQL trong Rails

  4. Xuất Blob từ cơ sở dữ liệu MySQL sang tệp chỉ có SQL

  5. LINQ to SQL nhiều bảng bên trái kết hợp bên ngoài