2017-05-28 30 views
1

我正在使用实体框架和SQL Server设计库存系统。这个应用程序将被成千上万的用户使用。如何设计一个应用程序/数据库,以允许用户同时更新相同的库存数据?目前,为了保持一致性,我使用行版本控制,但这通常会导致“更新冲突”错误。如何避免在同一时间更新同一记录时发生更新冲突

回答

1

了解更多关于重试模式(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); 
} 
相关问题