C# 种子方法在使用“迁移”时不添加用户-&引用;名义上
有关问题的实际情况,请阅读第二版第2段 我正在尝试在迁移运行时向数据库添加初始帐户,以确保对我的应用程序的访问 不幸的是,C# 种子方法在使用“迁移”时不添加用户-&引用;名义上,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,有关问题的实际情况,请阅读第二版第2段 我正在尝试在迁移运行时向数据库添加初始帐户,以确保对我的应用程序的访问 不幸的是,Seed方法完成后,表AspNetUsers没有更改,我无法找到适当的方法来调试可能的错误 配置.cs internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext> { public Configuration() { Au
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 */
}
}
这确实有效。因此,在发布updatedatabase-Force
之后,创建了一个名为Administrator的角色。但是,用户不是
EDIT2:
显然我找到了罪犯。
我试图确保管理员帐户始终可用。因此,我尝试添加一个用户用户名admin
。然而,这并没有起作用。过了一段时间,我考虑用另一种方法尝试,并将用户名改为username
。现在这样做了,用户被添加并推到了管理员的角色中
问题仍然存在:为什么添加带有特殊字符的用户(如
-
?默认情况下,用户名
只能是字母数字,也就是说,甚至不允许使用电子邮件地址)。您需要关闭验证或实现您自己的验证程序(在SO上很容易找到),例如
\u userManager=新的userManager(\u userStore);
_userManager.UserValidator=newuservalidator(_userManager){AllowOnlyAlphanumericUserNames=false};
您正在将new ApplicationDbContext()
传递给UserStore
constructor,而不是传递给您在参数中已经获得的上下文实例,这可能是一个问题,因为在这种情况下,您的最后一条注释行将不会起任何作用。如果我使用new ApplicationDbContext(),结果不会有什么不同
或context
加上context.SaveChanges()
。非常感谢。谷歌搜索AllowOnlyAlphanumericUserNames=false
带来了更多的见解!
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);
}
_userManager = new UserManager<IdentityUser>(_userStore);
_userManager.UserValidator = new UserValidator<IdentityUser>(_userManager) { AllowOnlyAlphanumericUserNames = false };