ASP.NET Core 2.0 Identity Изменение первичного ключа от строки до Guid - PullRequest
0 голосов
/ 22 сентября 2018

Я следовал этой статье , чтобы изменить тип данных первичного ключа классов Identity с String на Guid, и он создает тип данных uniqueidentifier для соответствующих столбцов в SQL Server вместо значения по умолчанию NVARCHAR, но я не могу использовать классы UserManager и SignInManager, поскольку они отказываются принимать настроенный класс ApplicationUser (который расширяет IdentityUser, как описано в статье) вместо класса IdentityUser по умолчанию.В статье нет подробностей, и, глядя на ответы на другие похожие вопросы по SO, такие как этот , кажется, что либо мне нужно изменить все классы Identity для достижения этой цели, либо использовать 'другой класс UserManager, в котором я не совсем уверен, как это сделать.

Мои настроенные модели удостоверений выглядят так:

public class IdentityModels
{
    // Add profile data for application users by adding properties to the ApplicationUser class
    public class ApplicationUser : IdentityUser<Guid>
    {
    }
    public class ApplicationRole : IdentityRole<Guid>
    {
    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(GetConnectionString());
        }

        private static string GetConnectionString()
        {
            const string databaseName = "testname";
            const string databaseUser = "testuser";
            const string databasePass = "testpass";

            return $"Server=localhost;" +
                   $"database={databaseName};" +
                   $"uid={databaseUser};" +
                   $"pwd={databasePass};" +
                   $"pooling=true;";
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Core Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Core Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }
    }
}

Как правильно изменить тип данных дляАтрибут Первичный ключ Identity Classes в Identity 2.0, так что UserManager и SignInManager принимают изменения?

1 Ответ

0 голосов
/ 20 декабря 2018

Основываясь на документации здесь:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-2.2

Вам нужно будет создать пользовательские классы, производные от каждого типа идентификации asp.net, которые имеют универсальный параметр TKey, который позволитвам указать тип для первичного ключа.Вот все подписи примеров пользовательских классов удостоверений:

public class ApplicationUserToken : IdentityUserToken<Guid> { }
public class ApplicationUserLogin : IdentityUserLogin<Guid>{ }
public class ApplicationRoleClaim : IdentityRoleClaim<Guid>{ }
public class ApplicationUserRole : IdentityUserRole<Guid>{ }
public class ApplicationUser : IdentityUser<Guid>{ }
public class ApplicationUserClaim : IdentityUserClaim<Guid>{ }
public class ApplicationRole : IdentityRole<Guid> { }

Затем в вашем приложении контекст БД наследуется от IdentityDbContext, заменяя все классы удостоверений на пользовательские:

public class IdentityDbContext<TUser, TRole, TKey> : IdentityDbContext<TUser, TRole, TKey, IdentityUserClaim<TKey>, IdentityUserRole<TKey>, IdentityUserLogin<TKey>, IdentityRoleClaim<TKey>, IdentityUserToken<TKey>>

Вот так:

 public class AppDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid, ApplicationUserClaim, ApplicationUserRole, ApplicationUserLogin, ApplicationRoleClaim, ApplicationUserToken> { }

Затем добавьте это в файл Startup.cs:

services.AddIdentity<ApplicationUser, ApplicationRole>()
                .AddEntityFrameworkStores<AppDbContext>()
                .AddDefaultTokenProviders();

Последнее, что вы можете запустить новую миграцию и обновить базу данных через консоль:

PM> Add-Migration cmdlet Add-Migration at command pipeline position 1 Supply values for the following parameters: Name: Guid-PK PM> Update-Database -verbose

Приветствия.

...