2015-05-19 2 views
1

Я получаю сообщение об ошибке «UserId not found». при попытке посеять несколько пользователей в моей базе данных.MVC5 Identity Seed Пользователи в базе данных

Вот мой метод семян:

protected override void Seed(newBestPlay.Models.ApplicationDbContext context) 
{ 
    // This method will be called after migrating to the latest version. 
    InitialCreate create = new InitialCreate(); 
    create.Down(); 
    create.Up(); 
    context.Configuration.LazyLoadingEnabled = true; 

    if (!context.Roles.Any(r => r.Name == "Admin")) 
    { 
     var store = new RoleStore<IdentityRole>(context); 
     var manager = new RoleManager<IdentityRole>(store); 
     var role = new IdentityRole { Name = "Admin" }; 
     manager.Create(role); 
    } 

    if (!context.Roles.Any(r => r.Name == "User")) 
    { 
     var store = new RoleStore<IdentityRole>(context); 
     var manager = new RoleManager<IdentityRole>(store); 
     var role = new IdentityRole { Name = "User" }; 
     manager.Create(role); 
    } 

    if (!context.Users.Any(u => u.UserName == "user1")) 
    { 
     var store = new UserStore<ApplicationUser>(context); 
     var manager = new UserManager<ApplicationUser>(store); 
     var user = new ApplicationUser { UserName = "user1", Email = "email1" }; 
     manager.Create(user, "ChangeItAsap!"); 
     manager.AddToRole(user.Id, "Admin"); 
    } 

    if (!context.Users.Any(u => u.UserName == "user2")) 
    { 
     var store = new UserStore<ApplicationUser>(context); 
     var manager = new UserManager<ApplicationUser>(store); 
     var user = new ApplicationUser { UserName = "user2", Email = "email2" }; 
     manager.Create(user, "ChangeItAsap!"); 
     manager.AddToRole(user.Id, "Admin"); 
    } 
} 

Это происходит сбой в этой последней строке "manager.AddToRole". Я понял, что второй пользователь даже не добавляется в базу данных, поэтому он не может найти пользователя. И так как он никогда не добавлялся.

ответ

2

Выяснил это. Это не разрешало тире в моем имени пользователя. Мое имя пользователя (электронная почта) имеет тире в части домена. Я должен был добавить в

this.UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false }; 

в мой IdentityConfig.cs файл в конструктор ApplicationUserManager так теперь выглядит следующим образом:

public class ApplicationUserManager : UserManager<ApplicationUser> 
    { 
     public ApplicationUserManager(IUserStore<ApplicationUser> store) 
      : base(store) 
     { 
      this.UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false }; 
     } 
..... 
0

добавить это в ваш метод семян:

var manager = new UserManager<ApplicationUser>(store); 

    manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
      { 
       AllowOnlyAlphanumericUserNames = false, 

      }; 
Смежные вопросы