リトライパターンの詳細については、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);
}