ASP.NET SQL概要文件提供程序-ProfileBase.Create()方法是否命中DB?

ASP.NET SQL概要文件提供程序-ProfileBase.Create()方法是否命中DB?,asp.net,sql,membership,profile,provider,Asp.net,Sql,Membership,Profile,Provider,我正在使用SQLMemebershipProvider并使用概要文件。我有一个名为UserProfile的自定义类,它继承自ProfileBase类,并使用它设置自定义属性,如“FullName”。我想循环数据库中的所有用户并访问他们的配置文件属性。在每次迭代中,我都调用ProfileBase.Create()来获取一个新的概要文件,然后访问属性 在我看来,每次调用ProfileBase.Create()时,它都会访问我的SQL数据库。但我只是想确认一下。那么,有人知道这是否真的每次都会击中数据

我正在使用SQLMemebershipProvider并使用概要文件。我有一个名为UserProfile的自定义类,它继承自ProfileBase类,并使用它设置自定义属性,如“FullName”。我想循环数据库中的所有用户并访问他们的配置文件属性。在每次迭代中,我都调用ProfileBase.Create()来获取一个新的概要文件,然后访问属性

在我看来,每次调用ProfileBase.Create()时,它都会访问我的SQL数据库。但我只是想确认一下。那么,有人知道这是否真的每次都会击中数据库吗

更好的是,有没有人有更好的解决方案来解决我如何通过一次调用DB来获取所有用户的自定义配置文件属性


我知道我可以编写自己的存储过程,但我想知道是否有一种内置于成员资格提供程序中的方法。

在调用以下命令之前,您不会一直保存到数据库:

Save方法写入已修改的内容 将配置文件属性值添加到数据 来源。配置文件提供程序可以 减少现场的活动量 仅通过执行更新来获取数据源 当IsDirty属性设置为 对。默认情况就是这样 SqlProfileProvider


迈克,我相信你所观察到的是真的。我正在使用一个ProfileProvider,它使用Azure表存储作为数据存储。我想从数据库中获取一个用户配置文件列表,并将它们与来自成员资格提供者的信息合并。 我花了一些时间才意识到,以用户名作为参数调用ProfileBase.Create()会对表存储执行查找,并实际检索与该用户名关联的数据。就我而言,调用这个方法Create()是有误导性的,我希望Load()或Get()。 当前我的代码如下所示:

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

public IEnumerable,但在我看来,这仅通过生成代理类为自定义配置文件属性提供设计时智能感知。

我不调用Save方法。我只是试图检索配置文件及其自定义属性。顺便说一句,如果您将AutoSave设置为true,那么您的配置文件将自动更新感谢您的澄清。非常感谢。