2013-12-09 25 views
5
Göçler Yapılandırma sınıfta

, orada Tohum yöntemdir ve bu şekilde görünür:ASP.net MVC + ASP.net Kimlik tohumlama roller ve kullanıcılar

protected override void Seed(DatabaseContext context) 
     { 
      var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context)); 
      var userManager = new UserManager<User>(new UserStore<User>(context)); 

      if (!roleManager.RoleExists("Administrator")) 
      { 
       roleManager.Create(new IdentityRole("Administrator")); 
      } 

      var user = new User {UserName = "someUserName"}; 


      if (userManager.FindByName("someUserName") == null) 
      { 
       var result = userManager.Create(user, "password"); 

       if (result.Succeeded) 
       { 
        userManager.AddToRole(user.Id, "Administrator"); 
       }  

      } 
      } 

Sonra PM konsolunda ben güncelleme veritabanı koşuyoruz ve başarıyla veritabanı ekili ve AspNetUserRoles tablosunda, kullanıcı bazıUserName ve Administrator rolünün bağlı olduğunu görebiliyorum.

Ama benim kullanıcı bu rolde değildi sanki sayfaya giriş yönlendiriliyorsanız denetleyici üzerinde [Authorize(Roles = "Administrator")] bağlıyor koymak, bu yüzden benim denetleyicisi hattı ekledik zaman:

var x = _userManager.IsInRole(_userManager.FindByName("someUserName").Id, "Administrator"); 

Ve x yanlıştır. Bu neden oluyor ? Ve bunu nasıl düzeltebilirim? Ve bu tohum veri tabanına uygun değilse, hangisi?

cevap

7

deneyin Burada geç yükleme devre dışı bırakıldığında ne olup bittiğini benim tahminim, IdentityUser/ApplicationUser nesnenin Rolleri özelliği null veya boş çünkü bu koleksiyon elle yüklenmedi. Daha sonra kod, koleksiyonun basitçe hiç yüklenmediği durumlarda kullanıcıya hiçbir rol atanmamış gibi devam eder.

0

Tohum yönteminin sonunda

context.SaveChanges(); 

inceleyin. UserManager veya UserStore erişir

context.Configuration.LazyLoadingEnabled = true; 

sizin tohum yönteminde