2013-09-13 4 views
0

Я в ситуации, когда мне нужно, чтобы мой SQLMembershipProvider рассматривал две разные базы данных. Я могу установить строку подключения поставщика программно в первом экземпляре, но не могу изменить его для последующего использования.Использование ASP.Net SqlMembershipProvider с несколькими базами данных

Кто-нибудь знает, возможно ли это, и если да, то как?

Спасибо!

public class CustomSqlMembershipProvider : SqlMembershipProvider 
{ 
    public static string connectionString { get; set; } 

    public override void Initialize(string name, NameValueCollection config) 
    { 
     DatabaseConfig _config = DatabaseConfig.GetInstance(); 

     if (String.IsNullOrEmpty(connectionString)) 
      connectionString = _config.BuildConnectionString(DatabaseConfig.enumConnectionString.MyRedsourceDev); 
     config["connectionString"] = connectionString; 
     base.Initialize(name, config); 

     //Also tried this but it doesn't work 
     // Set private property of Membership provider. 
     //FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic); 
     //connectionStringField.SetValue(this, connectionString); 
    } 
} 

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

Я заметил, что существует частное поле под названием «_Initialzed», которое я пытался установить в false, используя тот же самый код отражения выше, в надежде заставить провайдера повторно инициализировать каждый раз, но безрезультатно

+0

Можете ли вы показать код .. – Sasidharan

ответ

0

Да, я отсортирован это сейчас ...

Я создал второй SqlMembershipProvider (как в web.config и как классовые, как в OP), но с другой строкой подключения.

Я тогда различие между поставщиками следующим образом:

MembershipUser user = Membership.Providers["SPECIFICPROVIDERNAME"].GetUser(username, false);