【发布时间】:2014-08-08 21:00:32
【问题描述】:
问题背景
在我的 Web 应用程序中,我一直在使用 ASP.NET Identity。我通过从 IdentityUser 继承 User 类创建了自定义用户配置文件。为了能够将角色与例如角色组连接起来,我还在我的数据库中创建了一个自定义角色类,它继承自 IdentityRole 类。
我的数据库模型如下所示:
问题不在于创建用户。 这行得通:
var userManager = new UserManager<User>(new UserStore<User>(_context));
var result = userManager.Create(user, password);
与创建角色相同。
var rm = new RoleManager<Role>(new RoleStore<Role>(_context));
var result = rm.Create(new Role(name));
问题
但是当我尝试将角色附加到用户时(使用以下代码)
var um = new UserManager<User>(new UserStore<User>(_context));
var result = um.AddToRole(userId, roleName);
我得到的错误基本上是“实体类型 IdentityRole 不是当前上下文模型的一部分。”
这是真的,顺便说一句。但是我怎样才能使我的 Role 实体被视为 IdentityRole 实体,它基本上是或必须是。
在此处查看完整的堆栈跟踪:http://pastebin.com/sEPv5LiT
提前致谢!
【问题讨论】:
-
您有两个不同的上下文是否有特定原因?如果没有为 UserManager 使用相同的上下文,您的实体可能会起作用:stackoverflow.com/a/22672165/433234
-
我有一个 DbContext。此外,这三段代码使用我的 DbContext 的相同实例,这不应该给 AFAIK 带来任何问题。
-
遇到同样的问题,你解决了吗?
-
@YehiaA.Salam 最后,我在创建帐户后“手动”将角色连接到特定用户,效果很好。手动我的意思是直接编辑数据库而不需要额外的层(在这种情况下是 UserManager)。如果你愿意,我有一些示例代码给你。
-
@CorstianBoerman 可能是与我一起工作的 UserStore 东西stackoverflow.com/questions/28116426/…
标签: asp.net entity-framework asp.net-identity