2013-12-09 18 views
5

Trong Migrations lớp cấu hình, có phương pháp Seed, và có vẻ như:vai trò ASP.net MVC + ASP.net nhận dạng Seeding và người dùng

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"); 
       }  

      } 
      } 

Và sau đó trong PM console tôi đã chạy cập nhật cơ sở dữ liệu và nó đã thành công trong cơ sở dữ liệu, và trong bảng AspNetUserRoles tôi có thể thấy rằng vai trò người dùng someUserName và Administrator được kết nối.

Nhưng khi tôi đặt thuộc tính [Authorize(Roles = "Administrator")] trên bộ điều khiển Tôi đã chuyển hướng để đăng nhập vào trang như nếu người dùng của tôi không được vai trò đó, vì vậy tôi đã thêm dòng trong bộ điều khiển của tôi:

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

Và x là sai. Tại sao chuyện này đang xảy ra ? Và làm thế nào tôi có thể sửa nó? Và nếu đây không phải là cách thích hợp để tạo cơ sở dữ liệu, thì đó là gì?

Trả lời

7

Hãy thử trong phương pháp dòng dõi ngươi

context.Configuration.LazyLoadingEnabled = true; 

Dưới đây là dự đoán của tôi vào những gì đang xảy ra khi tải lười biếng bị vô hiệu hóa, Roles tài sản của đối tượng IdentityUser/ApplicationUser là null hoặc rỗng khi UserManager hoặc UserStore truy cập nó vì bộ sưu tập đó không được tải theo cách thủ công. Đoạn mã sau đó tiếp tục giống như không có vai trò nào được gán cho người dùng khi thực tế là bộ sưu tập đơn giản chưa bao giờ được nạp.

0

Hãy thử

context.SaveChanges(); 

ở phần cuối của phương pháp Seed.

Các vấn đề liên quan