2016-11-14 1 views
2

Ich habe einige zu diesem Thema suchen und sind einige Fragen in Bezug auf AspNetUserRoles nicht in der EDMX-Designer beim Generieren von der Datenbank. Es ist jedoch im ModelBrowser und ich kann diese Tabelle nicht anzeigen, damit ich die Rollenautorisierung verwenden kann.AspNetUserRoles nicht in EDMX beim Generieren von Datenbank

Wenn ich diese Methode schlug in meinen Rollen Klasse

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

Die Ergebnisse immer wieder als null kommen ..

aber es wie diese statt

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

Aber diese Weise aussehen soll gibt einen Fehler aus, da AspNetUserRoles nicht im EDMX-Designer enthalten ist, wenn ich die EF aus der Datenbank erzeuge.

Wie kann ich diese Tabelle erscheinen lassen, damit ich mit dem fortfahren kann, was ich tun muss?

Ich habe versucht, die EDMX zu aktualisieren und das funktioniert auch nicht.

Antwort

1

Ich hatte gerade diese Frage mehr oder weniger selbst ... "Wo ist die AspNetUserRoles-Tabelle im Modell?"

Mein Verständnis ist, dass die AspNetUserRoles-Tabelle erstellt wird und besteht aus zwei Fremdschlüsseln, eins für die Tabelle AspNetUsers für seinen Id-Wert und eins für die AspNetRoles-Tabelle, auch für seinen Id-Wert. Wenn Sie einem Benutzer eine Rolle zuweisen, fügt er eine Zeile in die AspNetUserRoles-Tabelle ein, um Ihnen eine sogenannte Navigationseigenschaft in der AspNetUsers-Tabelle zu geben. Sehen Sie sich Ihre edmx an und suchen Sie die AspNetUsers-Tabelle. Unten sehen Sie eine Navigationseigenschaft von "AspNetRoles". Diese Sammlung steht Ihnen in einem AspNetUser-Objekt als Code zur Verfügung.

als Benutzer viele Rollen gehören können, ist dies Navigation Property eine Sammlung, die zu einer Liste etwas wie folgt zugeordnet werden können:

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

if (selectedUser == null) return; 

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

Für das ursprüngliche Plakat des Ich würde die Liste zurückkehren und damit arbeiten ...

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

Dies bedeutet im Grunde, dass Sie die AspNetUserRoles-Tabelle nicht explizit "brauchen". Sie sollten in der Lage sein, mit den Rollen eines Benutzers wie oben beschrieben zu arbeiten. Ich bin mir nicht sicher, ob es empfohlen wird oder nicht, aber ich würde auch nicht direkt in die AspNetUserRoles-Tabelle einfügen. Sie sollten dem Benutzerobjekt einfach eine Rolle hinzufügen und die UserRoles-Tabelle automatisch aktualisieren lassen.

Verwandte Themen