我将 ASP.NET MVC 与 Entity Framework 一起使用,我正在尝试弄清楚如何让角色管理器正常工作。在我最初注册用户、触发 EF 构建用户管理/身份表后,我最终将它们(AspNetUsers、AspNetRoles、AspNetUserRoles、AspNetUserClaims 和 AspNetUserLogins)移动到我现有的数据库并将默认连接也设置为指向那里.一切都很好,直到我决定需要实现角色管理器并将以下条目添加到我的 web.config 之后,
<roleManager enabled="true" defaultProvider="RoleManager">
<providers>
<add name="RoleManager"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="DefaultConnection"
applicationName="MyApp" />
</providers>
</roleManager>
并尝试创建一个角色(Roles.CreateRole("Admin")
[附带问题,在 VS 2013 的代码之外有没有办法做到这一点?]),我遇到了错误:找不到存储过程“dbo.aspnet_CheckSchemaVersion”
。所以我很自然地假设这些表不是唯一生成的数据库对象,但在检查了原始的 mdf 之后,事实证明确实如此。此时我完全不知所措,非常感谢任何帮助。
更新:我查找了与使用 aspnet_reqsql 工具添加角色管理器功能相关的解决方案,但生成的表似乎不兼容。例如,dbo.aspnet_Users 而不是 dbo.AspNetUsers。
请您参考如下方法:
AspNetUsers、AspNetRoles、AspNetUserRoles、AspNetUserClaims 和 AspNetUserLogins 表似乎是较新的 ASP.NET Identity 系统的一部分,而 aspnet_Users 等是旧系统的一部分(我相信是成员资格)。 Roles.CreateRole
来自 Membership,而不是 Identity。对于身份系统,roleManager
web.config 条目是不必要的,可以使用 Microsoft.AspNet.Identity.RoleManager
创建角色。例如,
RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new MyDbContext()));
var roleresult = RoleManager.Create(new IdentityRole(roleName));