C# Переключение между несколькими поставщиками профилей.NET

Я пытаюсь определить двух провайдеров профиля в моем web.config. Тот, который использует внешнюю службу со своей собственной базой данных, и тот, который подключается к базе данных текущего приложения:

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

Я предполагаю, что "LocalProfileProvider" будет использоваться по умолчанию, но у меня есть несколько случаев, когда мне нужно использовать "ExternalProfileProvider". Я вижу, что я могу ссылаться на конкретного поставщика в ProfileManager, например, так:

ProfileManager.Providers["ExternalProfileProvider"]

Но я не вижу, как я могу сказать приложению использовать этого конкретного провайдера, чтобы позволить мне сохранить некоторые данные профиля в другой системе для текущего пользователя. Можно ли определить двух поставщиков профилей, а затем указать, какой из них вы используете в определенной точке кода, чтобы сохранить определенные свойства?

2 ответа

Решение

Разобрался... очень просто на самом деле, но мои поиски в гугле так и не нашли нужный мне ответ:

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);

Это спасло мою жалкую задницу.. но я должен был использовать

DefaultProfileProvider p (DefaultProfileProvider)UserProfile ....

вместо SqlProfileProvider

Другие вопросы по тегам