Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 种子方法在使用“迁移”时不添加用户-&引用;名义上_C#_Asp.net Mvc_Asp.net Identity - Fatal编程技术网

C# 种子方法在使用“迁移”时不添加用户-&引用;名义上

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

有关问题的实际情况,请阅读第二版第2段

我正在尝试在迁移运行时向数据库添加初始帐户,以确保对我的应用程序的访问

不幸的是,
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 };