Я хочу создать 5 пользователей при запуске и использовать только эти учетные записи. Стандартный механизм регистрации отключен.
Итак, я нашел этот пример кода, он работает, но только для создания первого пользователя в этом цикле. Когда он пытается создать 4 других пользователя, выдается исключение ObjectDisposed.
Я обнаружил почти такую же проблему на github , которая, кажется, все еще открыта. Но я надеюсь, что в этом есть какое-то решение.
//DbInitialize.cs
public async Task Initialize()
{
_context.Database.EnsureCreated();
if (!_context.Roles.Any(r => r.Name == "Administrator"))
{
await _roleManager.CreateAsync(new IdentityRole("Administrator"));
}
if (!_context.Users.Any())
{
for (int i = 0; i < 5; i++)
{
string userName = "testuser" + (i + 1);
string password = "Abc123456789";
//line where exception occures when i=1
var result =
await _userManager.CreateAsync(
new ApplicationUser {UserName = userName, Email = userName, EmailConfirmed = true},
password);
if (result.Succeeded)
{
var user = await _userManager.FindByEmailAsync(userName);
await _userManager.AddToRoleAsync(user, "Administrator");
}
}
}
}
//startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc().AddViewOptions(options => options.HtmlHelperOptions.ClientValidationEnabled = false);
// Add Database Initializer
services.AddScoped<IDbInitializer, DbInitializer>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IDbInitializer dbInitializer)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseBrowserLink();
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
dbInitializer.Initialize();
}
Примечание: инициализация _userManager находится внутри класса DbInitializer
private readonly ApplicationDbContext _context;
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<IdentityRole> _roleManager;
public DbInitializer(
ApplicationDbContext context,
UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager)
{
_context = context;
_userManager = userManager;
_roleManager = roleManager;
}