【问题标题】:Best way to check a setting in all profiles检查所有配置文件中的设置的最佳方法
【发布时间】:2011-03-24 21:52:25
【问题描述】:

使用 ASP.net,是否有推荐的最佳方式来访问代码中配置文件的特定字段。我正在查看我的旧问题-设计-解决方案 2.0 书,它通过拉取数据库中的所有成员然后遍历每个人的配置文件来实现(参见下面的代码)。有没有更好的办法?

for each (MembershipUser user in Membership.GetAllUsers())
{
    ProfileCommon userProfile = profile.GetProfile(user.UserName);
    if (userProfile.mysetting == desiredValue)
    { 
         //do something
    }
}

编辑 1

我发现它可以比拉成员然后拉配置文件更有效一点。可能并非所有成员都有个人资料,因此如果您使用以下代码,您将提取所有个人资料(数量可能少于成员,然后可以遍历它:

for each (ProfileInfo theProfile in ProfileManager.GetAllProfiles (ProfileAuthenticationOption.All)
{
    ProfileCommon pc = ProfileBase.Create(theProfile.UserName)
    if (pc.mysetting == desiredValue)
    {
        //do something
    }
}

它仍然会为每个配置文件往返数据库,但它可能不像我们使用成员那样多...

【问题讨论】:

    标签: asp.net asp.net-membership asp.net-profiles


    【解决方案1】:

    使用内置配置文件,没有更好的方法。 Tim 提供的一种选择是 Table Profile 提供程序或编写您自己的配置文件提供程序。

    或者您可以完全走其他路线,即在您自己的自定义表格中使用storing profile information

    【讨论】:

    • 我听说过提到的表配置文件提供程序,但我们的网站足够小,这不是什么大不了的事。我只是想知道是否有更好的方法。谢谢。
    【解决方案2】:

    您可以使用Table Profile Provider 并构建自定义查询以获得您想要的设置。

    【讨论】:

      【解决方案3】:

      你可以用 linq 做得更好,我现在没有 VS,但伪代码看起来像这样:

      var users = from MembershipUser user in Membership.GetAllUsers()
        where user.mysetting == desiredValue
        select user
      

      然后遍历用户,

      foreach(MembershipUser u in users) {
      // do something
      }
      

      应该只包含感兴趣的内容。 Linq 应该会为您正确处理 SQL 的执行,但您可以使用 profiler 检查它在做什么。


      编辑

      实际上,从性能角度来看,这可能不会为您带来任何好处,GetAllUsers 将带回一切。您可能希望为 users 表创建一个 linq2sql dbml 映射,并使用它而不是 Membership 类来查询自定义属性。


      编辑 2

      ASP.NET Roles and Profiles: best way to query for collection of users who match custom profile property?

      如果您使用的是表配置文件提供程序,则可以对该表使用 linq 查询: http://weblogs.asp.net/kencox/archive/2010/09/05/using-the-sql-table-profile-provider-in-asp-net-4-web-applications-c-amp-vb.aspx

      【讨论】:

      • 我想我有点困惑,MembershipUser 对象不会包含配置文件中的任何内容,因此通过 Linq 提取它对配置文件信息没有帮助。
      • 这就是我在编辑 2 中提到表配置文件的原因,您可能希望针对它编写 linq 查询。
      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      相关资源
      最近更新 更多