当从数据库生成时,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表自动更新。