ASP.NET SQL 프로파일 공급자 - 프로파일베이스 .create () 메소드가 DB를 누르나요?

StackOverflow https://stackoverflow.com/questions/1126719

문제

SQLMememebershipprovider와 함께 작업하고 프로파일을 사용하고 있습니다. ProfileBase 클래스에서 상속되는 userProfile이라는 사용자 정의 클래스가 있으며이를 사용하여 "fullName"과 같은 사용자 정의 속성을 설정합니다. 데이터베이스의 모든 사용자를 살펴보고 프로필 속성에 액세스하고 싶습니다. 각 반복마다 profilebase.create ()를 호출하여 새 프로파일을 얻은 다음 속성에 액세스합니다.

프로파일베이스 (create) ()을 내 SQL 데이터베이스에 부딪히는 모든 시간마다 나처럼 보인다. 그러나 나는 단지 이것의 확인을 찾고 있습니다. 그렇다면 이것이 실제로 매번 DB에 도달했는지 아는 사람이 있습니까?

더 나은 방법으로, 누구든지 모든 사용자가 사용자 지정 프로필 속성을 가진 모든 사용자를 얻기 위해 DB를 호출 할 수있는 방법에 대한 더 나은 솔루션을 가지고 있습니까?

나는 내 자신의 저장된 Proc를 쓸 수 있다는 것을 알고 있지만 회원 공급자에게 내장 된 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책

마이크, 나는 당신이 관찰 한 것이 사실이라고 믿습니다. Azure TableStorage를 데이터 저장소로 사용하는 ProfileProvider와 함께 일하고 있습니다. 데이터베이스에서 사용자 프로파일 목록을 얻고 멤버십 제공 업체의 정보와 병합하고 싶었습니다. 인수로서 사용자 이름을 가진 profilebase.create ()를 호출하는 데 시간이 걸렸을 때까지 시간이 걸렸습니다. 검색합니다 해당 사용자 이름과 관련된 데이터. 내가 염려하는 한이 방법을 부릅니다 만들다() 오해의 소지가 있습니다 짐() 또는 얻다(). 현재 내 코드는 다음과 같습니다.

    public IEnumerable<AggregatedUser> GetAllAggregatedUsers()
    {
        ProfileInfoCollection allProfiles = this.GetAllUsersCore(
             ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All)
        );

        //AggregatedUser is simply a custom Class that holds all the properties (Email, FirstName) that are being used
        var allUsers = new List<AggregatedUser>();

        AggregatedUser currentUser = null;
        MembershipUser currentMember = null;
        foreach (ProfileInfo profile in allProfiles)
        {
            currentUser = null;
            // Fetch profile information from profile store
            ProfileBase webProfile = ProfileBase.Create(profile.UserName);
            // Fetch core information from membership store
            currentMember = Membership.FindUsersByName(profile.UserName)[profile.UserName];
            if (currentMember == null)
                continue;

            currentUser = new AggregatedUser();
            currentUser.Email = currentMember.Email;
            currentUser.FirstName = GetStringValue(webProfile, "FirstName");
            currentUser.LastName = GetStringValue(webProfile, "LastName");
            currentUser.Roles = Roles.GetRolesForUser(profile.UserName);
            currentUser.Username = profile.UserName;
            allUsers.Add(currentUser);
        }

        return allUsers;
    }

    private String GetStringValue(ProfileBase profile, String valueName)
    {
        if (profile == null)
            return String.Empty;
        var propValue = profile.PropertyValues[valueName];
        if (propValue == null)
            return String.Empty;

        return propValue.PropertyValue as String;
    }

더 나은 (더 간단하고, 더 성능있는) 방법이 있습니까?

  1. 프로필 제공 업체에서 모든 사용자 정의 프로필 정보를 검색하고
  2. 관리자 페이지에 예를 들어 멤버십 제공 업체 정보와 병합?

나는 보았다 웹 프로필 빌더 그러나 IMO 이것은 프록시 클래스를 생성하여 사용자 정의 프로필 속성에 대한 설계 시간 지능 만 제공합니다.

다른 팁

전화 할 때까지 데이터베이스에 지속되지 않습니다 Save:

저장 메소드는 수정 된 프로파일 속성 값을 데이터 소스에 씁니다. 프로파일 제공 업체는 ISDIRTY 속성이 TRUE로 설정된 경우에만 업데이트를 수행하여 데이터 소스에서 활동량을 줄일 수 있습니다. 이것은 기본 SQLPROFELEPROVIDER의 경우입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top