2012-03-21 6 views
2

나는이 두 가지 방법roleprovider에서 이러한 두 가지 방법의 차이점은 무엇입니까? 나는 사용자 지정 역할 공급자를 구현을 통해가는 것처럼

public override string[] GetUsersInRole(string roleName) {} 
public override string[] FindUsersInRole(string roleName, string usernameToMatch) {} 

있습니까없는이 같은 일을 가로 질러왔다? 당신은 역할을 제공하고 그 역할을하는 모든 사용자를 되 찾습니 까? 실제로 FindUsersInRole에서 usernameToMatch의 요점은 무엇인지 모르겠다 ... 내 이해는 여러 사용자를 반환해야하지만 한 개로 제한하지 않을 것인가?

답변

2

내가 올바르게 기억한다면 GetUsersInRole은 그 역할을 가진 모든 사용자를 얻을 것입니다.

SELECT u.UserName 
FROM dbo.aspnet_Users u, dbo.aspnet_UsersInRoles ur 
WHERE u.UserId = ur.UserId AND @RoleId = ur.RoleId AND u.ApplicationId = @ApplicationId 
ORDER BY u.UserName 

FindUsersInRole에서, 당신은 rolename뿐만 아니라 사용자 이름 패턴을 보내 : 이것은 실행 aspnetdb SQL 쿼리입니다. 메서드는 사용자 이름과 일치하는 사용자를 반환합니다.

SELECT u.UserName 
FROM dbo.aspnet_Users u, dbo.aspnet_UsersInRoles ur 
WHERE u.UserId = ur.UserId AND @RoleId = ur.RoleId AND u.ApplicationId = @ApplicationId AND LoweredUserName LIKE LOWER(@UserNameToMatch) 
ORDER BY u.UserName 

그래서 두 방법은 두 가지 기능을 수행 : 여기서이 방법에 대한 SQL aspnetdb이다.

+0

따라서 FindUsersInRole은 한 명의 사용자 만 반환해야합니까? 어쩌면 그것은 나이지만 메서드 이름과 반환 유형은 사용자 목록이 반환된다는 것을 의미합니다. – chobo

+2

FindUsersInRole은 'si %'와 같은 필터링을 사용하여 'si'로 시작하는 사용자 만 반환 할 수 있습니다. – sisve

+0

좋은 관찰 - SQL 문에서 LIKE는 Simon이 말한 것처럼 si % 또는 % si %와 같은 wilder 일치 항목을 취할 수 있습니다. 나는 개인적으로 그런 문자열을 보내지 않을 것이고 당신이 옳다는 것을 알 수있는 SQL 문을 보지 않아도된다. –