1

私はEntity FrameworkとSQL Serverを使用して在庫システムを設計しています。このアプリは何千人ものユーザーによって使用されます。ユーザーが同じインベントリデータを同時に更新できるようにするためのアプリケーション/データベースの設計方法を教えてください。現時点では、一貫性のために行のバージョン管理を使用していますが、これはしばしば「更新の競合」エラーを引き起こします。同じレコードを同時に更新するときの更新の競合を回避する方法

答えて

1

リトライパターンの詳細については、hereをご覧ください。これにより、競合を検出し、何をすべきかを判断することができます(書き直し、マージ、またはエラーをユーザーにスローする)。使い方の

例:

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); 
} 
関連する問題