Tôi đã gặp một vấn đề về việc gieo hạt cơ sở dữ liệu với Identity v2. Tôi tách ra IdentityModel từ dự án MVC5 sang Lớp Truy cập Dữ liệu của tôi, nơi tôi cũng cài đặt EF Migrations. Vì vậy, tôi nhận xét ra mã mà sử dụng bên trong "IdentityConfig.cs" để tạo người dùng ban đầu và đặt mã bên trong cơ sở dữ liệu hạt giống của tôi trông như thế nàyCơ sở dữ liệu về Seed cho Identity 2
protected override void Seed(Repository.DataContext.IdentityDb context)
{
// var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
// var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
var owinContext = new OwinContext();
var userManager = owinContext.GetUserManager<ApplicationUserManager>();
var roleManager = owinContext.Get<ApplicationRoleManager>();
const string name = "[email protected]";
const string password = "[email protected]";
const string roleName = "Admin";
// //Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null)
{
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
var user = userManager.FindByName(name);
if (user == null)
{
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
// // Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name))
{
var result = userManager.AddToRole(user.Id, role.Name);
}
}
Bây giờ khi tôi chạy lệnh update-cơ sở dữ liệu, tôi nhận được lỗi
Value cannot be null.
Parameter name: manager
Dường như, tôi nhận được null trong hai dòng sau mã
var userManager = owinContext.GetUserManager<ApplicationUserManager>();
var roleManager = owinContext.Get<ApplicationRoleManager>();
Bất kỳ đề nghị xin vui lòng?
Nhìn vào dòng 51 ở đây: https://raw.githubusercontent.com/OdeToCode/MVC5_Samples/master/identity/BasicIdentityWithDiagrams /Migrations/Configuration.cs Tôi không nghĩ bạn sẽ thành công khi sử dụng Owin trong phương thức Seed trừ khi bạn đang chạy Seed từ bên trong ứng dụng. Owin sẽ không ở xung quanh hoặc được cấu hình nếu bạn chạy Seed từ giao diện quản lý gói. – OdeToCode