新 ASP.NET MVC 6 标识中 AspNetUsers
表中的 ConcurrencyStamp
列的用途是什么?
这是 AspNetUsers
表的数据库架构:
它也存在于 AspNetRoles
表中:
我记得它不存在于 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
的编辑器页面,想要更新该用户。
Admin_1
打开页面,看到名为 Peter 的用户。Admin_2
打开页面,看到用户名为 Peter(显然)。Admin_1
将用户名更新为 Tom,并保存数据。现在UserA
在名为 Tom 的数据库中。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/