Asp.net mvc 在MVC 5中,未首先使用实体框架数据库填充AspNetUserRoles表
在我的项目中,我试图使用实体框架检索MVC5中的所有用户及其角色 首先使用数据库设置DBContext。但令人厌倦的是,AspNetUserRoles表没有自动填充,而且AspNetUser和AspNetRole之间的关系是多对多的 下面是屏幕截图的链接Asp.net mvc 在MVC 5中,未首先使用实体框架数据库填充AspNetUserRoles表,asp.net-mvc,entity-framework,asp.net-mvc-5,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,在我的项目中,我试图使用实体框架检索MVC5中的所有用户及其角色 首先使用数据库设置DBContext。但令人厌倦的是,AspNetUserRoles表没有自动填充,而且AspNetUser和AspNetRole之间的关系是多对多的 下面是屏幕截图的链接 有人能给我一些提示吗?非常感谢。因为默认情况下,在您将角色明确添加到seed方法中之前,不会对其进行种子设定 了解Asp.Net标识模块 如果要管理AspNetUsersRoles,必须进行以下修改 删除主键,实际上是由UserId和R
有人能给我一些提示吗?非常感谢。因为默认情况下,在您将角色明确添加到seed方法中之前,不会对其进行种子设定
了解Asp.Net标识模块
如果要管理AspNetUsersRoles,必须进行以下修改
这意味着相同,因此在创建AspNetUserRoles时管理此逻辑 我假设您完全可以在EDMX下看到AspNetUserRoles表 您可以通过代码访问此表,在大多数情况下就足够了 通常在ASP.NET MVC 5下
public class AccountController : Controller
{
private ApplicationUserManager _userManager;
...
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
...
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
您还需要在代码中包含此枚举
public enum AppUserRoles
{
Administrators = 1,
Managers = 2,
Users = 3,
Others = 4
}
另一种方法是使用可在EDMX中使用的存储过程
CREATE PROCEDURE GetUserRoleByUserId
@UserId nvarchar(128)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT [UserId],[RoleId] FROM [AspNetUserRoles] WHERE [UserId] LIKE @UserId
END
GO
希望这能对您有所帮助。您能提供DBContext的片段吗?它是否源自IdentityDbContext?我使用了MVC5附带的默认asp.net标识。步骤如下:1。使用Mvc模板在VS2013中创建Mvc 5项目。2.在新应用程序中注册用户,以便在SQL server中创建默认标识表。3.使用创建的数据库添加新的EF数据项。4.将所有表格添加到EF项中,EF项在上述屏幕截图中返回结果图。希望这能澄清问题。
CREATE PROCEDURE GetUserRoleByUserId
@UserId nvarchar(128)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT [UserId],[RoleId] FROM [AspNetUserRoles] WHERE [UserId] LIKE @UserId
END
GO