ASP.NET MVC 5 Identity AddUserToRole不起作用



我正在尝试使用ASP.NET MVC 5 Identity插入初始用户、角色并将用户附加到角色。

当用于UserManager和RolesManager的DbContext的Configuration.AutoDetectChangesEnabled=false时,

代码userManager.AddUserToRole(user,"TestRole")返回成功,但数据库中没有任何更新。

有没有办法在不创建自己的UserManager实现和UserStorage实现的情况下解决这个问题?

我使用迁移,在我的种子方法中,我以这种方式创建角色:

private void CreateRole(string roleName)
{
var rm = new RoleManager<IdentityRole>(
new RoleStore<IdentityRole>(new AppDbContext()));
var idResult = rm.Create(new IdentityRole(roleName));
}

并为用户添加角色:

var userStore = new UserStore<AppUser>(new AppDbContext());
var manager = new UserManager<AppUser>(userStore);
var user = manager.FindByName(userName);
if ( user == null ){
manager.Create(new AppUser { UserName = userName }, password);
}
user = manager.FindByName(userName);
manager.AddToRole(user.Id, roleName);

它正确地更新了数据库。

我的环境:
选择了个人用户帐户的项目支架。它使用ASP.net MVC5,Identity 1.0我在PrimaryApplicationContext(不是在IdentityModel.cs中创建的ApplicationDbContext)上启用了代码优先迁移

我的种子方法如下

protected override void Seed(MYProject.DAL.PrimaryApplicationContext context)
{
ApplicationDbContext userContext = new ApplicationDbContext();
var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(userContext));
var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(userContext));
if (!rm.RoleExists("Developer"))
{
var idResult = rm.Create(new IdentityRole("Developer"));
}
if (um.FindByName("Super") == null)
{
um.Create(new ApplicationUser() { UserName = "Super" } , "Password");
ApplicationUser user = um.FindByName("Super");
um.AddToRole(user.Id, "Developer"); 
}
}

如果应用程序使用与应用程序数据相同的上下文来存储用户数据,则不需要创建新的ApplicationDbContext,只需使用传递到种子方法中的上下文即可。

步骤1-创建一个用于存储身份数据的上下文实例。

步骤2-使用步骤1上下文创建RoleManager和UserManager的实例。*如果您遇到类似"角色管理器未启用"的错误,则需要添加

<roleManager enabled="true" />到Web.config的节点下。

步骤3-使用角色管理器查看角色是否已经存在,如果不存在-创建它。

步骤4-使用用户管理器查看用户是否已经存在,如果不存在,则创建它。

步骤5-创建角色和用户后,从数据库中检索用户(您需要将用户id添加到角色中)*请注意用户和角色管理器Create方法返回的是Identity Result对象,而不是角色/用户对象,因此下面的代码是INVALID

var result = usermanager.Create(new ApplicationUser()...
usermanager.AddToRole( result.Id, "Developer");

步骤6-使用UserManager将检索到的用户添加到角色中。步骤7-向Package Manager控制台发出"更新数据库"命令以重新设定数据库种子。

最新更新