【发布时间】:2014-08-12 16:37:29
【问题描述】:
我在我的 ASP.NET MVC 应用程序中使用 ASP.NET Identity。将用户添加到角色时出现我的问题。没有任何例外,但是由于 um.AddToRole() 没有将 db 条目添加到 AspNetUserRoles 表中。我的操作方法是这样的:
public ActionResult GrantAdmin(string id)
{
ApplicationUser user = um.FindById(id);
if (!rm.RoleExists("admin"))
{
rm.Create(new IdentityRole("admin"));
}
um.AddToRole(user.Id, "admin");
return View((object)user.UserName);
}
um 是 UserManager 类的对象:
private UserManager<ApplicationUser> um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
出现这种应用程序行为的原因是什么?有什么想法吗?
===编辑=== 这是我的 DbContext:
public ApplicationDbContext()
: base("DefaultConnection")
{
}
Web.config 中的默认连接:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-RecommendationPlatform-20140404055015.mdf;Initial Catalog=aspnet-RecommendationPlatform-20140404055015;Integrated Security=True" providerName="System.Data.SqlClient" />
【问题讨论】:
-
这听起来像是一个奇怪的问题 - 尽管自运行此程序以来您是否刷新了 SQL Management Studio 数据库列表?它有可能正在查看与您想要的数据库不同的数据库,如果它不存在,它会创建它并在该数据库中添加用户/角色。我只提到这一点,因为它也发生在我身上。
-
是的,我考虑到了这种可能性。但我根本看不到它。没有例外的条目表明正在其他地方进行条目......但我不知道它为什么会这样,以及如何明确指出正确的数据库@Darren。你是怎么解决这个问题的?
-
您能在您创建 DbContext 的位置显示代码吗?您可以在此处明确设置要使用的连接字符串的名称。
-
@Darren 它显示在我的代码的第二部分中。当我创建 UserManager 对象 (um) - 参数 od UserStore 是 new ApplicationDbContext()。
-
AddToRole 返回一个结果 IIRC。你能检查结果对象,也许答案就在那里。
标签: c# asp.net asp.net-mvc roles asp.net-identity