我在那里看到这个问题。但是答案对我不起作用。
我创建了一个空的asp.net网站。 .NET 4.5
我通过Install-Package Microsoft.AspNet.Identity.Sample -pre在nuget中安装了示例
我无法运行初始化程序。所以我做了以下
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
this.Database.Initialize(true);
}
static ApplicationDbContext()
{
// Set the database intializer which is run once during application start
// This seeds the database with admin user credentials and admin role
//
}` `
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Rolemanager始终为null。我尝试了其他答案,但它们从未成功。除了上面显示的内容外,我没有更改示例。那为什么不起作用呢?数据库和表是通过创建的。 rolemanager在下面使用,为空。
public static void InitializeIdentityForEF(ApplicationDbContext db)
{
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
const string name = "[email protected]";
const string password = "Admin@123456";
const string roleName = "Admin";
//Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null)
最佳答案
刚刚完成此工作,并提出了:
public static void InitializeIdentityForEF(ApplicationDbContext context)
{
context.Configuration.LazyLoadingEnabled = true;
//var userManager = HttpContext.Current
// .GetOwinContext().GetUserManager<ApplicationUserManager>();
//var roleManager = HttpContext.Current
// .GetOwinContext().Get<ApplicationRoleManager>();
var roleStore = new RoleStore<ApplicationRole, int, ApplicationUserRole>(context);
var roleManager = new RoleManager<ApplicationRole, int>(roleStore);
var userStore = new UserStore<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>(context);
var userManager = new UserManager<ApplicationUser, int>(userStore);
...
这似乎已经解决了我的Seed方法中其余的问题。使用Create和FindByName的RoleManager / UserManager异步方法时遇到一些问题,建议您同步进行所有操作。