使用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
}
}
它仍然会使每个配置文件的数据库往返,但它可能不会像我们使用成员那样多...
答案 0 :(得分:2)
使用内置配置文件,没有更好的方法。 Tim提供的一个选项是表配置文件提供程序或编写您自己的配置文件提供程序。
或者您可以在自己的自定义表格中完全使用其他路线,即storing profile information。
答案 1 :(得分: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
如果您正在使用表格配置文件提供程序,则可以对该表使用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
答案 2 :(得分:0)
您可以使用Table Profile Provider并构建自定义查询以获得所需的设置。