2015-09-15 2 views
0

Я пытаюсь изначально выложить свой db с помощью пользователя, некоторых ролей и затем попытаться назначить пользователя этой роли. В настоящее время я могу посеять пользователей и роли без проблем, но при попытке добавить пользователя к роли я получаю обрезку.MVC 5 Вставить пользователя в aspNetUserRole

Вот что я имею

//Create the role 
     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); 

     } 

     //Create a new user 
     if (!(context.Users.Any(u => u.UserName == "admin"))) 
     { 
      var userStore = new UserStore<ApplicationUser>(context); 
      var userManager = new UserManager<ApplicationUser>(userStore); 
      var userToInsert = new ApplicationUser { UserName = "admin", Email = "[email protected]" }; 

      userManager.Create(userToInsert, "[email protected]"); 
      //Assign the user to the role. 
      //This is where i'm having the problem! 
      userManager.AddToRolesAsync(userToInsert.Id, "admin"); 

     } 
     if (!(context.Users.Any(u => u.UserName == "worker"))) 
     { 
      var userStore = new UserStore<ApplicationUser>(context); 
      var userManager = new UserManager<ApplicationUser>(userStore); 
      var userToInsert = new ApplicationUser { UserName = "worker", Email = "[email protected]" }; 
      userManager.Create(userToInsert, "[email protected]"); 

     } 

ответ

0

Не используйте волшебные строки. Перемещение роли за пределами области «В» и при добавлении пользователя в роли используйте role.Name. Таким образом, у вас не будет проблемы, которую вы сейчас имеете, а ваша роль - «Администратор», но вы добавляете в «admin».

0

Вы вызываете метод, требующий массив. Я думаю, что вы, вероятно, хотите:

userManager.AddToRoleAsync(userToInsert.Id, "Admin"); 

или

userManager.AddToRolesAsync(userToInsert.Id, "Admin".ToArray()); 
0

Я думаю, что у вас есть проблемы с async методом. Чтобы преодолеть эту проблему, вы могли бы написать один из следующих кодов:

  1. Используйте AddToRole метод расширения вместо:

    userManager.AddToRole(userToInsert.Id, "Admin"); 
    
  2. вызова Wait() после вызова AddToRoleAsync:

    userManager.AddToRoleAsync(userToInsert.Id, "Admin").Wait(); 
    
  3. Или используйте async/await описание товара:

    public async Task Foo() 
    { 
        // other codes 
    
        await userManager.AddToRoleAsync(userToInsert.Id, "Admin"); 
    } 
    
0

я узнал, что я мог бы сделать это таким образом

var userStore = new UserStore<ApplicationUser>(context); 
     var userManager = new UserManager<ApplicationUser>(userStore); 

     if(!context.Users.Any(t => t.UserName == "[email protected]")) 
     { 
      var user = new ApplicationUser { UserName = "[email protected]", Email = "[email protected]" }; 
      userManager.Create(user, "passw0d!"); 

      context.Roles.AddOrUpdate(r => r.Name, new IdentityRole { Name = "Admin" }); 
      context.SaveChanges(); 
      userManager.AddToRole(user.Id, "Admin"); 
     } 

, который хорошо работает для меня Спасибо за комментарии

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