Я хочу использовать тип System.Guid как id для всех моих таблиц в asp.net web api application. Но я также использую Asp.net Identity, который использует идентификатор строкового типа (также для хранения указаний). Поэтому мне интересно, почему он использует строковый идентификатор вместо System.Guid по умолчанию? И какой лучший выбор использовать во всем приложении - Guid id или string-guid id? В случае использования строки - что является самым правильным и надежным способом генерации нового кода id или в базе данных?
Почему идентификатор пользователя идентификатора asp.net является строкой?
Ответ 1
С ASP.NET Core у вас есть очень простой способ указать тип данных, который вы хотите использовать для моделей Identity.
Первый шаг, переопределить классы идентичности из <string> to < тип данных, который вы хотите > :
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 OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
И в вашем классе запуска объявите службу идентификации с помощью своих моделей и объявите тип данных, который вы хотите для первичных ключей:
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext, Guid>()
.AddDefaultTokenProviders();
Ответ 2
В зависимости от того, какую версию аутентификации ASP.Net вы используете, в базе данных ASP.NET Identity v2 следует хранить ее как uniqueidentifier (Guid) в таблице AspNetUsers
. В более предыдущих версиях он будет хранить идентификатор пользователя как int в таблице webpages_Membership
.
Я считаю, что он начертал его как строку, поэтому он может быть любым типом данных, который вам нравится под капотом, и тогда он может быть внесен в ваш код по мере необходимости.