1

使用 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
    }
}

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

4

3 回答 3

2

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

或者您可以完全采用其他路线,即将个人资料信息存储在您自己的自定义表中。

于 2011-03-25T01:02:56.840 回答
0

你可能会用 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 的执行,但您可以检查它使用探查器执行的操作。


编辑

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


编辑 2

ASP.NET 角色和配置文件:查询与自定义配置文件属性匹配的用户集合的最佳方式?

如果您使用的是表配置文件提供程序,则可以对该表使用 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

于 2011-03-24T22:01:40.413 回答
0

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

于 2011-03-24T22:13:22.143 回答