当前位置: 首页 > 面试题库 >

ASP.NET SQL配置文件提供程序-ProfileBase.Create()方法是否命中数据库?

华项明
2023-03-14
问题内容

我正在使用SQLMemebershipProvider并使用配置文件。我有一个名为UserProfile的自定义类,该类继承自ProfileBase类,并使用它来设置自定义属性,例如“FullName”。我想遍历数据库中的所有用户并获得对其配置文件属性的访问。在每次迭代中,我都调用ProfileBase.Create()以获得新的配置文件,然后访问属性。

在我看来,每次调用ProfileBase.Create()都会命中我的SQL数据库。但我只是在寻求确认。那么,有谁知道这是否真的每次都击中了DB?

更好的是,还有谁能更好地解决我如何调用数据库以使所有用户拥有其自定义配置文件属性的更好的解决方案?

我知道我可以编写自己的存储proc,但是我想知道是否可以在Membership Provider中内置一种方法。


问题答案:

我相信您的观察是正确的。我正在使用将AzureTableStorage用作数据存储的ProfileProvider。我想从数据库中获取用户配置文件列表,并将其与成员资格提供者的信息合并。我花了一段时间才意识到,以用户名作为参数调用ProfileBase.Create()会对TableStorage进行查找,并实际上_检索_ 与该用户名关联的数据。就我而言,调用此方法 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;
    }

有没有更好的方法(更直接,更高效)

  1. 从配置文件提供者检索所有自定义配置文件信息,并
  2. 将它们与成员资格提供程序信息合并以在例如管理员页面中显示它们?

我看过Web ProfileBuilder,但是IMO仅通过生成代理类为自定义配置文件属性提供设计时的智能感知。



 类似资料:
  • 我在运行测试脚本后收到一个错误。我已经在其他测试脚本中运行了相同的方法,但我使用的这个脚本几乎与其他测试脚本相同。你能帮助我为什么会出现这个错误吗? 这是获取excel数据的方法。 这是我的数据提供程序方法

  • 有人知道TestNG如何根据为测试方法指定的数据提供者名称计算出数据提供者方法是什么吗? 我找到了这个解决方案:https://gist.github.com/ae6rt/3805639 但是,它没有考虑到数据提供者可能是: 在完全不同的类别中定义,或 在父类中定义,并且 该方法可以是静态的,也可以是非静态的 我试图自己破解一些东西,但后来我想我不可能是第一个试图解决这个问题的人,特别是因为显然T

  • 我有一个包含2列测试数据的xls文件。对于每一列,我都希望有一个测试方法。 现在我知道了如何使用dataprovider读取xls文件并将测试数据提供给一个测试方法。但如何使用同一个dataprovider进行多个测试呢? 我有下面的代码,一旦我运行这个代码得到错误,我的代码是: =========================================================默认

  • 问题内容: 有人可以向我解释差异吗? Provisioner-在docker中安装,运行,拉出容器中的一项工作。 提供程序-是运行VM的东西。即VBox运行ubuntu OS映像。 Docker如何成为提供者?它直接运行一些docker镜像吗?如果我在Windows上,必须有一些boot2docker的隐藏用法,对不对?我什么时候使用每个? 问题答案: Docker Provisioner帮助准备

  • Entity Framework Core 通过一个提供程序模型来允许使用 EF 访问各种不同的数据库。一些概念对于大部分数据库是通用的,这些都包含在主要的 EF Core 组件中,包括 LINQ 的查询表达、事务以及从数据中加载出来后对象的变更跟踪。一些概念则是特定于个别提供程序,比如 SQL Server 提供程序允许你配置内存优化表(一个特定于 SQL Server 的功能),另外一些概念则

  • 问题内容: 我在Mac OS X和Saxon-HE 9.3.0.5上使用Java SE 6。ServiceLoader无法找到的Saxon实现。 查找过程第3点中的状态方法的javadoc,用于本地化以下实现: 要求类加载器在资源目录META-INF / services中提供与javax.xml.xpath.XPathFactory匹配的服务提供者配置文件。有关文件格式和解析规则,请参见JAR文