种子方法在迁移时不添加用户,名称中"-"



请阅读第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 };

相关内容

  • 没有找到相关文章

最新更新