为什么 ASP.NET 标识为主键生成自己的 Guid,而不是依赖 SQL Server

本文关键字:Guid Server SQL 依赖 自己的 标识 NET ASP 为什么 | 更新日期: 2023-09-27 18:30:38

正如标题所说,为什么 ASP.NET Identity会生成一个Guid并将其转换为字符串,然后将其存储为nvarchar(128)(或者我可能错误的数据类型)到AspNetUsers和AspNetRoles表?

为什么这样做而不是将 SQL Server 中表的主键设置为键入唯一标识符并使用 newid() 或 newsequentialid()?

我是否应该遵循 ASP.NET 标识在生成和存储 Guid 方面的约定?

为什么 ASP.NET 标识为主键生成自己的 Guid,而不是依赖 SQL Server

因为 ASP.NET 标识域中有许多实体具有用于指定标识符类型的泛型类型参数。

例如IUser<TKey> .

另一方面,由于某些 ASP.NET 标识团队设计决策,他们将TKey类型锁定为IUserStore<TUser>界面中的string。查看其签名:

public interface IUserStore<TUser> : IUserStore<TUser, string>, IDisposable
       where TUser : class, IUser<string>

也就是说,任何自定义用户存储实现都必须使用string用户密钥。此外,并不是说这个接口应该在关系数据库之上实现。例如,就我而言,我已经为Redis和Mongo实现了它。另外,我也为HTTP实现了它!

总之,在后台,您被迫将任何标识符存储为string等效的数据存储在数据存储中的原因是整个IUser<TUser>界面。为什么他们将标识符类型锁定为string与某些设计决策有关(就我而言,我发现他们做出了错误的决定......