Я использую Identity 3. Я хочу создать пользователя-администратора при запуске.
Я преобразовал строковые идентификаторы в идентификаторы «int», используя в качестве примера SwiftCourier на github. Identity 3 отличается в некоторых аспектах, и это относится к настройке «int» для идентификаторов, как показано в примере SwiftCourier, по сравнению с Identity 2 и настройка идентификаторов "int".
Я сделал это, поместив «int» после моего пользователя:
public class User : IdentityUser<int>{...}
После моей роли:
public class Role : IdentityRole<int>
и в startup.cs в службах конфигурации я ввел это:
services.AddIdentity<User, Role>(options => options.User.AllowedUserNameCharacters = null)
.AddEntityFrameworkStores<JobsDbContext, int>()
.AddUserStore<UserStore<User, Role, JobsDbContext, int>>()
.AddRoleStore<RoleStore<Role, JobsDbContext, int>>()
.AddDefaultTokenProviders();
Затем я использовал это для заполнения ролей, и оно работает с целыми идентификаторами:
public static void EnsureRolesCreated(this IApplicationBuilder app)
{
var context = app.ApplicationServices.GetService<JobsDbContext>();
if (context.AllMigrationsApplied())
{
var roleManager = app.ApplicationServices.GetService<RoleManager<Role>>();
var Roles = new List<Role>();
Roles.Add(new Role { Name = "Admin", Description = "Users able to access all areas" });
Roles.Add(new Role { Name = "Technician", Description = "Users able to access just the schedule" });
foreach (var role in Roles)
{
if (!roleManager.RoleExistsAsync(role.Name.ToUpper()).Result)
{
roleManager.CreateAsync(role);
}
}
}
}
Пока все хорошо... Я хочу запустить только одного пользователя-администратора, и здесь я терплю неудачу...
Я использовал следующий Stackoverflow пример от @Guy.
Я борюсь с UserStore с этой строкой:
await new UserStore<User>(context).CreateAsync(userWithRoles.User);
Он не работает с «Пользователем», который только что переименован в мой ApplicationUser.
Ошибка, которую я получаю:
The type 'JobsLedger.Models.Identity.User' cannot be used as type parameter 'TUser' in the generic type or method 'UserStore<TUser>'. There is no implicit reference conversion from 'JobsLedger.Models.Identity.User' to 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser<string>'.
Кажется, он жалуется на то, что идентификатор "int", я думаю
Как заставить UserStore работать с «int» в этом отношении? В Startup.cs установлено значение int, как показано выше.
Если мне нужно создать собственный «UserStore», который работает с «int»... как вы это делаете в Identity 3?