c# - ASP.NET Identity userid 是顺序 guid

标签 c# asp.net-identity

MVC/EF 的 ASP.NET 身份代码将用户 ID 存储为 nvarchar(128)。这看起来像一个 GUID。我更喜欢使用顺序 GUID 作为 ID/私钥来提高性能。如何验证为 ASP.NET Identity 生成 GUID 的代码是顺序的?我在查找代码库的那部分时遇到问题。

最佳答案

Identity 是为与不同的持久性技术一起工作而构建的。我什至看到了在不是关系数据库的 Azure 表上存储数据的标识的实现。

顺序 GUID 只是 SQL Server 的一个特性,甚至不是每个版本的 SQL Server 都支持顺序 GUID(例如,SQL Azure 不知道顺序 GUID)。

但是如果您将 User.Id 设置为 Guid 类型并使用支持顺序 ID 的 SQL Server,您的表将使用 类型的 ID 创建sequentialguid.
我可以验证这一点 - 我在尝试将本地创建的数据库移植到 Azure SQL 中时遇到了几次类型问题。

更新

我的建议是将 ID 更改为 Guid - 与将其变为 int 的其他建议相同 - 您会在网上找到大量如何操作的指南。生成ID的地方在这里:

namespace Microsoft.AspNet.Identity.EntityFramework
{
  /// <summary>
  /// Default EntityFramework IUser implementation
  /// 
  /// </summary>
  public class IdentityUser : IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string>
  {
    public IdentityUser()
    {
      this.Id = Guid.NewGuid().ToString();
    }

    public IdentityUser(string userName)
      : this()
    {
      this.UserName = userName;
    }
  }
}

这是来自反编译器的框架的一部分。您很可能已经继承了此类以创建自己的 ApplicationIdetntityUser

但是,如果您如此热衷于顺序 guid,最安全的方法是让 SQL Server 为您创建它们。您可以通过在用户对象的 Guid Id 属性上添加 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 来实现。

您可以自己生成顺序 guid,但最终您会遇到来自不同线程的冲突。我建议您不要浪费时间,让 SQL Server 为您完成这项工作 - 那里有内置机制。

关于c# - ASP.NET Identity userid 是顺序 guid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197229/

相关文章:

c# - INSERT 语句与 FOREIGN KEY 约束错误冲突

c# - 尝试激活 'Microsoft.AspNetCore.Identity.SignInManager` 时无法解析类型 'xxxxx.LoginModel' 的服务

c# - 是否可以从列表中的项目获取索引?

c# - Xamarin.Forms:如何在 ListView 中搜索小写还是大写?

java - 约会的数据模型 - 选择多个日期

c# - Identity Server 3 + AspNet Identity 中基于角色的声明

Asp.Net Identity 查找不在角色中的用户

c# - 当用户使用 Identity 2.0 登录时覆盖 CheckPasswordAsync

c# - Excel 加载项 (C#) - 如何处理用户设置?

c# - 实现 Microsoft AspNet Identity IUserLockoutStore