我正在使用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。
答案 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));