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



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

当我在Roles类中点击这个方法时

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;
    }

结果总是返回null..

但是它应该是这样的

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;
    }

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

我怎样才能使这个表出现,以便我可以继续我需要做的事情?

我已经尝试更新EDMX,但也不工作。

我自己也或多或少有过这个问题…"AspNetUserRoles表在模型中的什么位置?"

我的理解是,AspNetUserRoles表被创建并由两个外键组成,一个到AspNetUsers表,用于它的Id值,另一个到aspnettroles表,也用于其Id值。当你给一个用户分配一个角色时,它会在AspNetUserRoles表中添加一行,从而在AspNetUsers表中给你一个所谓的"导航属性"。看看你的edmx,找到AspNetUsers表,在底部你会看到一个"aspnettroles"的导航属性,这个集合可以在AspNetUser对象的代码中使用。

一个用户可以属于多个角色,这个导航属性是一个集合,可以像这样分配给List:

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表自动更新。

相关内容

  • 没有找到相关文章

最新更新