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,并保存数据.现在,名为Tom的数据库中的UserA.
> Admin_2将用户名更新为Thomas,并尝试保存.
如果没有并发状态,Admin_1的更新将被Admin_2的更新覆盖,会发生什么.但是由于我们有ConcurrencyStamp,所以当Admin_1 / Admin_2加载页面时,邮件被加载.更新数据时,此戳记也将被更改.所以现在第5步将是系统抛出异常,告诉Admin_2这个用户已经被更新了,因为他的ConcurrencyStamp与他加载的不同.