ASP.NET Identity用户标识是一个顺序guid

时间:2015-01-28 16:20:50

标签: c# asp.net-identity

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

2 个答案:

答案 0 :(得分:2)

构建身份是为了使用不同的持久性技术。我甚至在Azure表上看到了Identity存储数据的实现,而不是关系数据库。

顺序GUID只是SQL Server的一项功能,甚至不是每个版本的SQL Server都支持顺序GUID(例如,SQL Azure不了解顺序GUID)。

但是,如果将User.Id设置为类型Guid并使用支持顺序ID的SQL Server,则将使用类型为sequentialguid的ID创建表。 我可以验证 - 我尝试将本地创建的数据库移植到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为你创建它们。您可以在用户对象的[DatabaseGenerated(DatabaseGeneratedOption.Identity)]属性上添加Guid Id

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

答案 1 :(得分:2)

Trailmax已经触及了大部分要点,但在可用时切换到顺序Guids是我们一直在考虑为Identity 3.0的默认EF身份实现做的事情。