C#在多个.NET配置文件提供程序之间切换

时间:2014-10-11 05:15:38

标签: asp.net profile-provider

我正在尝试在web.config中定义两个配置文件提供程序。一个使用具有自己的数据库的外部服务和一个连接到当前应用程序数据库的服务:

<profile defaultProvider="LocalProfileProvider">
<providers>
   <clear />
   <add name="LocalProfileProvider" ... />
   <add name="ExternalProfileProvider" ... />
</providers>

我假设默认会使用“LocalProfileProvider”,但在某些情况下我需要使用“ExternalProfileProvider”。我看到我可以在ProfileManager中引用特定的Provider,如下所示:

ProfileManager.Providers["ExternalProfileProvider"]

但是我没有看到我如何告诉应用程序使用这个特定的提供程序来允许我在当前用户的其他系统中保存一些配置文件数据。是否可以定义两个配置文件提供程序,然后指定您在代码中的特定点使用哪个提供程序来保存特定属性?

2 个答案:

答案 0 :(得分:1)

这保存了我的抱歉..但我不得不使用

DefaultProfileProvider p (DefaultProfileProvider)UserProfile ....

而不是SqlProfileProvider

答案 1 :(得分:0)

想出来...... very simple really,但我的谷歌搜索从未找到我需要的具体答案:

SqlProfileProvider p = (SqlProfileProvider)Profile.Providers["ExternalProfileProvider"];
SettingsPropertyValueCollection pvalues = p.GetPropertyValues(Profile.Context, ProfileBase.Properties);

pvalues["FirstName"].PropertyValue = "Bob";
pvalues["LastName"].PropertyValue = "Bobertson";


p.SetPropertyValues(Profile.Context, pvalues);

其他编辑:

如果您想访问和编辑其他用户的个人资料,请务必使用正确的个人资料上下文:

ProfileCommon userProfile = Profile.GetProfile("bob");
SqlProfileProvider p = (SqlProfileProvider)userProfile.Providers["ExternalProfileProvider"];
SettingsPropertyValueCollection pvalues = p.GetPropertyValues(userProfile.Context, ProfileBase.Properties);

pvalues["FirstName"].PropertyValue = "Bob";
pvalues["LastName"].PropertyValue = "Bobertson";

p.SetPropertyValues(userProfile.Context, pvalues);