将Identity Id从string更改为int

时间:2017-12-29 19:14:34

标签: c# .net identity

我尝试将Id从字符串更改为int但我遇到了一个问题: 所有其他帖子都在_Startup文件中使用:

    services.AddIdentity<User, IdentityRole<int>>.()
        .AddEntityFrameworkStores<DatabaseContext,int>()
        .AddDefaultTokenProviders();   

但是当我尝试做同样的事情时,我在DatabaseContext之后添加int时遇到了这个错误:

  

'IdentityBuilder'不包含'AddEntityFrameworkStores'的定义,并且没有可以找到接受类型'IdentityBuilder'的第一个参数的扩展方法'AddEntityFrameworkStores'(您是否缺少using指令或汇编引用?)(CS1061) (演示)

我做的其他改变:

       public class User : IdentityUser <int>  

       public class DatabaseContext :IdentityDbContext <User,IdentityRole<int>,int>                     

       protected override void OnModelCreating(ModelBuilder modelBuilder)

       {

        modelBuilder.Entity<User>(i => {
            i.ToTable("Users");
            i.HasKey(x => x.Id);
        });
        modelBuilder.Entity<IdentityRole>(i => {
            i.ToTable("Role");
            i.HasKey(x => x.Id);
        });
        modelBuilder.Entity<IdentityUserRole<int>>(i => {
            i.ToTable("UserRole");
            i.HasKey(x => new { x.RoleId, x.UserId });
        });
        modelBuilder.Entity<IdentityUserLogin<int>>(i => {
            i.ToTable("UserLogin");
            i.HasKey(x => new { x.ProviderKey, x.LoginProvider });
        });
        modelBuilder.Entity<IdentityRoleClaim<int>>(i => {
            i.ToTable("RoleClaims");
            i.HasKey(x => x.Id);
        });
        modelBuilder.Entity<IdentityUserClaim<int>>(i => {
            i.ToTable("UserClaims");
            i.HasKey(x => x.Id);
        });
            base.OnModelCreating(modelBuilder);

} 

1 个答案:

答案 0 :(得分:1)

可能您正在使用不再接受通用ASP.NET Core 2.x参数的TKey

  

AddEntityFrameworkStores方法不接受TKey参数   它在ASP.NET Core 1.x中完成。主键的数据类型由推断出来   分析DbContext对象。

相关链接:

Configure the ASP.NET Core Identity primary key data type