Microsoft.AspNet.Identity.EntityFramework -对象 UserIdentity 和 RoleIdenity 具有字符串类型的 Id 字段,因此创建的表具有数据类型 nvarchar(128)。
这些对象 Id 属性不应该是 System.Guid 类型,而数据库是否应该具有唯一标识符的数据类型?为什么不是呢?GUID 在创建新用户和角色时插入。
这很可能是因为 api 独立于存储提供程序,因此尽可能保持字段类型通用:http://blogs.msdn.com/b/webdev/archive/2013/06/27/introducing-asp-net-identity-membership-system-for-asp-net-applications.aspx
"如果您的应用程序要求是此信息可能存储在不同的存储机制中,例如 SharePoint、Azure 表服务、无 Sql 数据库等,现在可以插入不同的存储提供程序。
ASP.NET 团队的Hao Kung在关于如何将id类型更改为int的问题的评论中写道。
因此,我们决定使用字符串键以避免处理键序列化问题,EF 默认实现可以使用整数作为主键,GUID 只是生成随机唯一字符串键的简单方法。
用户ID的另一个原因可能是字符串被硬编码到声明API中,特别是Microsoft.AspNet.Identity.IdentityExtensions.GetUserId
,它使用System.Security.Claims.Value
,两者都返回字符串。