正在使角色管理器使用现有数据库

本文关键字:数据库 管理器 角色 | 更新日期: 2023-09-27 18:30:00

我正在将ASP.NET MVC与实体框架结合使用,并试图弄清楚如何让角色管理器工作。在我最初注册了一个用户,触发EF来构建用户管理/标识表之后,我最终将它们(AspNetUsers、AspNetRoles、AspNetUserRoles、阿斯pNetUserClaims和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中,有没有任何方法可以在代码之外做到这一点?]),我遇到了错误:Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'。因此,我自然地认为表不是唯一生成的数据库对象,但在检查了原始mdf之后,事实证明,这就是全部。在这一点上我完全不知所措,任何帮助都将不胜感激。

更新:我查找了与使用aspnet_reqsql工具添加角色管理器功能相关的解决方案,但它生成的表似乎不兼容。例如,dbo.aspnet_Users而不是dbo。AspNetUsers。

正在使角色管理器使用现有数据库

表AspNetUsers、AspNetRoles、AspNetUserRoles、阿斯pNetUserClaims和AspNetUserLogins似乎是较新的ASP.NET标识系统的一部分,而aspnet_Users等则是旧系统的一部分(我相信是Membership)。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));