为什么 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 标识域中有许多实体具有用于指定标识符类型的泛型类型参数。
例如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
与某些设计决策有关(就我而言,我发现他们做出了错误的决定......