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

时间:2014-11-11 01:30:06

标签: c# asp.net sql-server entity-framework asp.net-identity

我正在使用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中的代码之外执行此操作?]),我遇到了错误:Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'。所以我自然地认为这些表并不是唯一生成的数据库对象,但是在检查出原始的mdf之后,事实证明确实存在。在这一点上,我完全失去了任何帮助,我们将非常感激。

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

1 个答案:

答案 0 :(得分:3)

表AspNetUsers,AspNetRoles,AspNetUserRoles,AspNetUserClaims和AspNetUserLogins似乎是较新的ASP.NET身份系统的一部分,而aspnet_Users等是旧系统的一部分(我相信会员资格)。 Roles.CreateRole来自会员,而不是身份。对于Identity系统,roleManager web.config条目是不必要的,并且将使用Microsoft.AspNet.Identity.RoleManager创建角色。如,

RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new MyDbContext()));
var roleresult = RoleManager.Create(new IdentityRole(roleName));