Skip to main content
 首页 » 编程设计

c#之让角色管理器与现有数据库一起工作

2024年08月12日2652php

我将 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));