如何更改AspNetUser
的PK列来自 guid
的表格至int
数据类型?
现在应该可以使用最新的 asp.net-identity
今天发布的版本。
但是我在任何地方都找不到这是如何完成的?
最佳答案
默认情况下,ASP.NET 标识(使用 Entity Framework )使用字符串作为主键,而不是 GUID,但它确实将 GUID 存储在这些字符串中。
您需要再定义几个类,我刚刚创建了一个新项目(我使用的是 VS2013 Update 2 CTP),以下是您需要更改的身份模型:
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationUserRole : IdentityUserRole<int>
{
}
public class ApplicationUserLogin : IdentityUserLogin<int>
{
}
public class ApplicationUserClaim : IdentityUserClaim<int>
{
}
public class ApplicationRole : IdentityRole<int, ApplicationUserRole>
{
}
public class ApplicatonUserStore :
UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public ApplicatonUserStore(ApplicationDbContext context)
: base(context)
{
}
}
public class ApplicationDbContext
: IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
您还需要更新其他一些地方,只需遵循编译错误,最常见的更改是需要转换返回形式 User.Identity.GetUserId() 的字符串为整数。
另外,在回答 another question (虽然我确实问了这个问题),我提供了一个示例解决方案,请参阅下面的存储库:
https://github.com/JSkimming/AspNet.Identity.EntityFramework.Multitenant
关于int - 身份将 GUID 更改为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22547712/