请阅读第EDIT2段了解问题的实际状态
我正在尝试在迁移运行时向数据库中添加一个初始帐户,以确保能够访问我的应用程序。
不幸的是,在Seed
方法完成后,表AspNetUsers
没有更改,并且我找不到正确的方法来调试可能的错误。
配置.cs
internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
ContextKey = "Namespace.Models.ApplicationDbContext";
}
protected override void Seed(ApplicationDbContext context)
{
var manager = new UserManager<ApplicationUser>(
new UserStore<ApplicationUser>(
new ApplicationDbContext()));
var user = new ApplicationUser()
{
UserName = "admin",
Email = "admin@admin",
LastName ="lname",
FirstName = "fname"
};
manager.Create(user, @"gibberish");
/* context.SaveChanges(); ?valid */
}
}
在发出update-database -force -verbose
命令后,pm控制台会写入The Seed method is being executed
(德语的自由翻译),但如上所述,不会使用新用户更新该表。
我哪里错了?
编辑:我刚刚尝试了以下操作:
if (!context.Roles.Any(r => r.Name == "Administrator"))
{
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store);
var role = new IdentityRole { Name = "Administrator" };
manager.Create(role);
}
这确实奏效了。因此,在Update-Database -Force
发布之后,创建了一个名为Administrator的角色。但用户没有。
第二版:所以很明显我找到了罪魁祸首。我试图确保管理员帐户始终可用。因此,我尝试添加一个用户username-admin
。然而,这并没有奏效。过了一段时间,我想用不同的方法尝试一下,并将用户名更改为username
。现在,这就成功了,用户被添加并推到了角色Administrator
中。
问题仍然存在:为什么添加具有-
这样特殊字符的用户不起作用?
默认情况下,UserName
只能是字母数字,即不允许使用电子邮件地址。您需要关闭验证或实现自己的验证器(在SO上很容易找到),例如
_userManager = new UserManager<IdentityUser>(_userStore);
_userManager.UserValidator = new UserValidator<IdentityUser>(_userManager) { AllowOnlyAlphanumericUserNames = false };