asp.net-mvc - 新的 ASP.NET MVC 6 标识中的 AspNetUsers 表中的 ConcurrencyStamp 列的用途是什么?

标签 asp.net-mvc concurrency database-schema identity asp.net-core-mvc

新 ASP.NET MVC 6 标识中 AspNetUsers 表中的 ConcurrencyStamp 列的用途是什么?

这是 AspNetUsers 表的数据库架构:

enter image description here

它也存在于 AspNetRoles 表中:

enter image description here

我记得它不存在于 ASP.NET MVC 5 标识中。

到目前为止我注意到它似乎具有 GUID 值,因为它是使用以下代码定义的:

/// <summary>
/// A random value that must change whenever a user is persisted to the store
/// </summary>
public virtual string ConcurrencyStamp { get; set; } = Guid.NewGuid().ToString();

但是这个文档不足以让我理解它在哪些情况下使用。

最佳答案

顾名思义,它是用来防止并发更新冲突的。

例如,数据库中有一个名为 Peter 的 UserA 2 管理员打开UserA的编辑器页面,想要更新该用户。

  1. Admin_1 打开页面,看到名为 Peter 的用户。
  2. Admin_2 打开页面,看到用户名为 Peter(显然)。
  3. Admin_1 将用户名更新为 Tom,并保存数据。现在 UserA 在名为 Tom 的数据库中。
  4. Admin_2 将用户名更新为 Thomas,并尝试保存。

如果没有 ConcurrencyStamp,会发生什么情况:Admin_1 的更新将被 Admin_2 的更新覆盖。 但由于我们有 ConcurrencyStamp,因此当 Admin_1/Admin_2 加载页面时,会加载标记。当更新数据时,这个标记也会改变。 因此,现在第 5 步将是系统抛出异常,告诉 Admin_2 该用户已更新,因为他的 ConcurrencyStamp 与他加载的用户不同。

关于asp.net-mvc - 新的 ASP.NET MVC 6 标识中的 AspNetUsers 表中的 ConcurrencyStamp 列的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252640/

相关文章:

c# - 将网站和类库部署到 Azure

c# - 不能将类型 void 隐式转换为对象。 .NET MVC 部分 View 结果

php - 需要以最少的数据库查询提供类别/搜索结果过滤的建议

php - 数据库设计 : Selecting and limiting Favorites

database-design - 我应该为同一平台内的不同 Web 产品创建单独的用户表吗?

c# - ASP.NET 4.6 MVC 如何返回包含具有正确时区的日期时间数据的 Json 结果?

asp.net-mvc - ASP.net MVC 成员身份重定向取决于角色

java - 在构造函数中引用现有文件时 Windows Java 文件锁定?

java - 具有快速 contains(Object o) 方法的 LinkedBlockingQueue?

当向 go 例程之外的 channel 发送值时,go 例程会死锁