如何在同时更新同一记录时避免更新冲突

时间:2017-05-28 00:46:43

标签: c# asp.net sql-server entity-framework entity-framework-6

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

1 个答案:

答案 0 :(得分: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);
}