Asp.net mvc 在MVC 5中,未首先使用实体框架数据库填充AspNetUserRoles表

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

在我的项目中,我试图使用实体框架检索MVC5中的所有用户及其角色

首先使用数据库设置DBContext。但令人厌倦的是,AspNetUserRoles表没有自动填充,而且AspNetUserAspNetRole之间的关系是多对多的

下面是屏幕截图的链接


有人能给我一些提示吗?非常感谢。

因为默认情况下,在您将角色明确添加到seed方法中之前,不会对其进行种子设定
了解Asp.Net标识模块


如果要管理AspNetUsersRoles,必须进行以下修改

  • 删除主键,实际上是由UserId和RoleId确认的

  • 在表中添加一个新的Id字段,并像主键一样进行检查。

  • 更新您的模型

  • 现在,您可以搭建此实体并创建控制器和视图来管理此实体

    注意:请记住,在DB端更改此表的主键意味着您必须控制如何在应用程序端创建AspNetUserRoles记录,因为您现在可能在表上有记录冗余,例如: MyRoles=1(主键),UserID=1,RoleID=1,Comment=User1是Admin MyRoles=2(主键),UserID=1,RoleID=2,Comment=User1再次成为管理员


    这意味着相同,因此在创建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