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