1
我正在使用實體框架和SQL Server設計庫存系統。這個應用程序將被成千上萬的用戶使用。如何設計一個應用程序/數據庫,以允許用戶同時更新相同的庫存數據?目前,爲了保持一致性,我使用行版本控制,但這通常會導致「更新衝突」錯誤。如何避免在同一時間更新同一記錄時發生更新衝突
我正在使用實體框架和SQL Server設計庫存系統。這個應用程序將被成千上萬的用戶使用。如何設計一個應用程序/數據庫,以允許用戶同時更新相同的庫存數據?目前,爲了保持一致性,我使用行版本控制,但這通常會導致「更新衝突」錯誤。如何避免在同一時間更新同一記錄時發生更新衝突
瞭解更多關於重試模式(here是我的博文)。有了它,你可以檢測到衝突,並做出一個desicion做什麼(重寫,合併或拋出錯誤的用戶)。使用的
實施例:
var retryCount = 3;
var currentRetry = 0;
using (var context = new DbContext(ConnectionString))
{
var user = context.Set<User>().First(o => o.Id == 1);
user.Login = "newuserlogin";
do
{
try
{
currentRetry++;
context.SaveChanges();
break;
}
catch (DbUpdateConcurrencyException ex) when (currentRetry <= retryCount)
{
//conflict detected
var entry = ex.Entries.Single();
//rewrite values from database
entry.OriginalValues.SetValues(entry.GetDatabaseValues());
}
} while (true);
}