【问题标题】:Is ASP.NET Identity userid a sequential guidASP.NET Identity 用户 ID 是顺序 guid
【发布时间】:2015-01-28 16:20:50
【问题描述】:

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

【问题讨论】:

  • 你可以用Int32代替GUID,你为什么要关心性能?如果它是桌子上的一个 PK,它就会被索引。
  • 可能是数据库生成的。无论如何,由于潜在的冲突,它可能不会是连续的。让它按顺序排列实际上并不能提高性能。
  • 请不要说顺序 Guid 不会提高性能:stackoverflow.com/questions/170346/…。你可以阅读这个问题。
  • @mybirthname 很公平。实际上,这个问题指出了关于 newsequentialid 的事情,这提醒了我——如果你使用 SQL Server,EF 实际上会使用 newsequentialid 生成数据库,但如果你使用的是 Azure,则不会,因为那里不支持它(因为并发担忧)。所以这可能回答了 OP 的问题——如果他使用传统的 MSSQL,它将(可能)是连续的。

标签: c# asp.net-identity


【解决方案1】:

Identity 旨在与不同的持久性技术配合使用。我什至看到了在 Azure Tables 上存储数据的 Identity 实现,它不是关系数据库。

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

但如果您将User.Id 设置为Guid 类型并使用支持顺序ID 的SQL Server,您的表将使用sequentialguid 类型的ID 创建。
我可以验证 - 我有几次尝试将本地创建的 DB 移植到 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 为您完成这项工作 - 那里有内置机制。

【讨论】:

  • 您说将 User.Id 设置为 Guid...这与将其更改为 int 类型的其他说明相同吗?看来 EF 代码首先生成 id 值。这意味着 MSSQL 可能没有生成 id 字段……这意味着某处有一段代码生成了 id。那段代码就是我要找的。​​span>
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2014-05-02
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多