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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 新ASP.NET MVC 6身份中AspNetUsers表中的ConcurrencyStamp列的用途是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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与他加载的不同.

猜你在找的asp.Net相关文章