2016-11-14 60 views
2

我已經在這個問題上進行了一些探索,並且在從數據庫生成時遇到了一些關於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,那也不管用。

回答

1

我剛剛自己有這個問題,我自己或多或少......「模型中的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表自動更新。

相關問題