ASP.NET Identity userid 是顺序 guid
Is ASP.NET Identity userid a sequential guid
MVC/EF 的 ASP.NET 身份代码将用户 ID 存储为 nvarchar(128)。这看起来像一个 GUID。我更喜欢对 ID/Private 键使用顺序 GUID 来提高性能。如何验证为 ASP.NET Identity 生成 GUID 的代码是顺序的?我找不到那部分代码库。
Identity 是为与不同的持久性技术一起工作而构建的。我什至看到了在不是关系数据库的 Azure 表上存储数据的标识的实现。
顺序 GUID 只是 SQL 服务器的一个特性,甚至不是 SQL 服务器的每个版本都支持顺序 GUID(例如,SQL Azure 不知道顺序 GUID)。
但是如果您将 User.Id
设置为 Guid
类型并使用 SQL 支持顺序 ID 的服务器,您的表将使用 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;
}
}
}
这是来自反编译器的框架的一部分。您很可能已经从这个 class 继承来创建您自己的 ApplicationIdetntityUser
.
但是,如果您如此热衷于顺序 guid,最安全的方法是让 SQL 服务器为您创建它们。您可以在用户对象的 Guid Id
属性 上添加 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
。
您可以自己生成顺序 guid,但最终您将 运行 陷入来自不同线程的冲突。我建议您不要浪费时间,让 SQL 服务器为您完成工作 - 那里有内置机制。
Trailmax 已经触及了大部分要点,但在可用时切换到顺序 Guid 是我们一直在考虑为 Identity 3.0 的默认 EF 身份实现做的事情。
MVC/EF 的 ASP.NET 身份代码将用户 ID 存储为 nvarchar(128)。这看起来像一个 GUID。我更喜欢对 ID/Private 键使用顺序 GUID 来提高性能。如何验证为 ASP.NET Identity 生成 GUID 的代码是顺序的?我找不到那部分代码库。
Identity 是为与不同的持久性技术一起工作而构建的。我什至看到了在不是关系数据库的 Azure 表上存储数据的标识的实现。
顺序 GUID 只是 SQL 服务器的一个特性,甚至不是 SQL 服务器的每个版本都支持顺序 GUID(例如,SQL Azure 不知道顺序 GUID)。
但是如果您将 User.Id
设置为 Guid
类型并使用 SQL 支持顺序 ID 的服务器,您的表将使用 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;
}
}
}
这是来自反编译器的框架的一部分。您很可能已经从这个 class 继承来创建您自己的 ApplicationIdetntityUser
.
但是,如果您如此热衷于顺序 guid,最安全的方法是让 SQL 服务器为您创建它们。您可以在用户对象的 Guid Id
属性 上添加 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
。
您可以自己生成顺序 guid,但最终您将 运行 陷入来自不同线程的冲突。我建议您不要浪费时间,让 SQL 服务器为您完成工作 - 那里有内置机制。
Trailmax 已经触及了大部分要点,但在可用时切换到顺序 Guid 是我们一直在考虑为 Identity 3.0 的默认 EF 身份实现做的事情。