2016-11-14 5 views
2

데이터베이스에서 생성 할 때 EDMX 디자이너에없는 AspNetUserRoles와 관련하여 몇 가지 질문을 보았습니다. 그러나 ModelBrowser에서이 테이블을 표시 할 수 없으므로 역할 권한 부여를 사용할 수 있습니다. 내 역할 클래스에서이 방법을 쳤을 때데이터베이스에서 생성 할 때 AspNetUserRoles가 데이터베이스에서 생성 될 때

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

그러나 그 방법과 같아야합니다 .. 다시 널 (null)로 올 데이터베이스에서 EF를 생성 할 때 AspNetUserRoles가 EDMX 디자이너에 없기 때문에 오류가 발생합니다.

내가해야 할 일을 계속할 수 있도록이 테이블을 표시하려면 어떻게해야합니까?

EDMX를 업데이트하려고 시도했지만 작동하지 않습니다.

답변

1

방금이 질문을 나 자신이 많든 적든 ... "모델의 AspNetUserRoles 테이블은 어디에 있습니까?"

내 이해는 AspNetUserRoles 테이블이 만들어지고 두 개의 외래 키로 구성됩니다. 하나는 AspNetUsers 테이블에 대한 Id 값이고 다른 하나는 AspNetRoles 테이블에 대한 ID 값입니다. 사용자에게 역할을 할당하면 AspNetUsers 테이블에서 "탐색 속성"을 제공하기 위해 AspNetUserRoles 테이블에 행이 추가됩니다. 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 테이블을 자동으로 업데이트해야합니다.