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与他加载的不同.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。