针对MVC / EF的ASP.NET Identity代码将userid存储为nvarchar(128)。 它看起来像一个GUID。 我更喜欢使用顺序GUID作为ID /私钥以提高性能。 我如何验证为ASP.NET Identity生成GUID的代码是连续的? 我无法找到代码库中的那部分。
针对MVC / EF的ASP.NET Identity代码将userid存储为nvarchar(128)。 它看起来像一个GUID。 我更喜欢使用顺序GUID作为ID /私钥以提高性能。 我如何验证为ASP.NET Identity生成GUID的代码是连续的? 我无法找到代码库中的那部分。
Identity被设计用于与不同的持久化技术一起使用。我甚至见过Identity实现将数据存储在Azure表上,这并不是关系数据库。
Sequential GUID只是SQL Server的一个功能,而且并不是每个版本的SQL Server都支持Sequential GUID(例如,SQL Azure不知道Sequential 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;
}
}
}
Trailmax已经触及了大部分主要点,但在可用时切换到顺序Guid是我们一直在考虑为Identity 3.0的默认EF身份实现所做的事情。
Int32
代替GUID
,为什么还要担心性能?如果它是表中的主键,那么它已经被索引了。 - Ofiris