C# Asp.net标识:为什么聚集索引位于guid(nvarchar)列上,以及如何更改?

C# Asp.net标识:为什么聚集索引位于guid(nvarchar)列上,以及如何更改?,c#,asp.net,sql-server,asp.net-identity,C#,Asp.net,Sql Server,Asp.net Identity,Asp.net identity使用聚集索引将主键创建为nvarchar(128)。 基于我想 更新我的应用程序,使其具有聚集索引为int的列 将主键存储的guid更改为int 你有什么建议? 如果第一个解决方案是可行的,那么实体框架是否提供了实现这一点的方法? 是#2的唯一方法,如果您不需要(或不想)使用guid作为主键,可以将它们更改为int,如下所示: public class ApplicationUser : IdentityUser<int, ApplicationUserL

Asp.net identity使用聚集索引将主键创建为nvarchar(128)。 基于我想

  • 更新我的应用程序,使其具有聚集索引为int的列
  • 将主键存储的guid更改为int
  • 你有什么建议? 如果第一个解决方案是可行的,那么实体框架是否提供了实现这一点的方法?
    是#2的唯一方法

    ,如果您不需要(或不想)使用guid作为主键,可以将它们更改为int,如下所示:

    public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, 
        ApplicationUserRole, ApplicationUserClaim>
    {
    }
    
    public class ApplicationUserLogin : IdentityUserLogin<int>
    {
    }
    
    public class ApplicationUserClaim : IdentityUserClaim<int>
    {
    }
    
    public class ApplicationRole : IdentityRole<int, ApplicationUserRole>
    {
    }
    
    public class ApplicationUserRole : IdentityUserRole<int>
    {
    }
    
    公共类应用程序用户:IdentityUser
    {
    }
    公共类ApplicationUserLogin:IdentityUserLogin
    {
    }
    公共类ApplicationUserClaim:IdentityUserClaim
    {
    }
    公共类应用程序角色:IdentityRole
    {
    }
    公共类ApplicationUserRole:IdentityUserRole
    {
    }
    
    然后声明您的DbContext,如下所示:

    public class MyContext: IdentityDbContext<ApplicationUser, ApplicationRole, int,
      ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim> 
    {
    }
    
    公共类MyContext:IdentityDbContext
    {
    }
    
    可能重复您可以使用我在这里发布的方法:因此,一个新表(
    aspnet\u UserID
    )映射
    guid
    s和
    int
    s。这样,您就不需要更改成员资格提供程序,而且一切都可以正常工作,但您可以使用
    int
    而不是
    guid
    链接所有表。如果您没有成千上万的用户,我就不会为此操心。@TimSchmelter问题是关于Asp.Net身份,不是成员资格提供程序,这两个选项非常不同。@trailmax:你说得对,我不熟悉Asp.Net标识,所以我将两者都归为一类。使用int而不是string有什么好处吗?(反之亦然-字符串而不是int)?nvarchar(128)将支持比int更多的用户。SQL中的NewID(),C#中的GetNewID()和NewGuid()可以生成唯一的ID。在较小的表上,Int sync可能更快。但不能用于合并复制同步。此外,用户不会感到咬牙切齿的OCD迫切需要按ID字段对表进行排序,而更可能会按名称或与表所含数据更相关的其他字段对表进行排序。