当从数据库生成时,AspNetUserRoles不在EDMX中

问题描述:

我已经在这个问题上进行了一些探索,并且在从数据库生成时遇到了一些关于AspNetUserRoles不在EDMX设计器中的问题。然而,它在ModelBrowser中,我不能让这个表显示,所以我可以使用角色授权。当从数据库生成时,AspNetUserRoles不在EDMX中

当我在我的角色类打这个方法

public override string[] GetRolesForUser(string username) 
    { 
     DTE = new DatabaseTestingEntities(); 
     string userID = DTE.AspNetUsers.Where(w => w.Email == username).Select(s => s.Id).FirstOrDefault(); 
     string roleID = DTE.AspNetUsers.Include("AspNetRoles").Where(s => s.Id == userID).FirstOrDefault().ToString();//.AspNetUserRoles.Where(w => w.UserId == userID).Select(s => s.RoleId).FirstOrDefault(); 
     string roleName = DTE.AspNetRoles.Where(w => w.Id == roleID).Select(s => s.Name).FirstOrDefault(); 
     string[] results = { roleName }; 
     return results; 
    } 

结果总会回来的空..

然而,它应该是这样的,而不是

public override string[] GetRolesForUser(string username) 
    { 
     DTE = new DatabaseTestingEntities(); 
     string userID = DTE.AspNetUsers.Where(w => w.Email == username).Select(s => s.Id).FirstOrDefault(); 
     string roleID = DTE.AspNetUserRoles.Where(w => w.UserId == userID).Select(s => s.RoleId).FirstOrDefault(); 
     string roleName = DTE.AspNetRoles.Where(w => w.Id == roleID).Select(s => s.Name).FirstOrDefault(); 
     string[] results = { roleName }; 
     return results; 
    } 

但这种方式抛出一个错误,因为当我从数据库生成EF时,AspNetUserRoles不在EDMX设计器中。

我怎样才能让这张桌子出现,以便我可以继续我需要做的事情?

我试过更新EDMX,那也不管用。

我刚刚自己有这个问题,我自己或多或少......“模型中的AspNetUserRoles表在哪里?”

我的理解是创建AspNetUserRoles表,它由两个外键组成,一个是AspNetUsers表的Id值,另一个是AspNetRoles表的Id值。将角色分配给用户时,它将一行添加到AspNetUserRoles表中,以便在AspNetUsers表上为您提供所谓的“导航属性”。看看你的edmx并找到AspNetUsers表,在底部你会看到一个“AspNetRoles”的导航属性,这个集合可以在AspNetUser对象的代码中使用。

作为一个用户可以属于多个角色,这个导航属性是可以分配到一个列表这样的集合:

AspNetUser selectedUser = dbContext.AspNetUsers.FirstOrDefault(u => u.UserName == "foo"); 

if (selectedUser == null) return; 

List<AspNetRole> selectedUsersRoles = selectedUser.AspNetRoles.ToList(); 

对于楼主的我将返回列表,并与合作...

public override List<AspNetRoles> GetRolesForUser(string username) 
{ 
    DTE = new DatabaseTestEntities(); 
    AspNetUser selectedUser = DTE.AspNetUsers.FirstOrDefault(u => u.UserName == username); 
    if (selectedUser == null) return null; //User not found - return null 

    return List<AspNetRole> selectedUsersRoles = selectedUser.AspNetRoles.ToList(); 
} 

这基本上意味着你不需要明确地“需要”AspNetUserRoles表。如上所述,您应该能够使用用户的角色。我不确定它是否被推荐,但我不会直接插入到AspNetUserRoles表中。您应该只为用户对象添加一个角色,并让UserRoles表自动更新。