使用ASP.Net SqlMembershipProvider与多个数据库

时间:2013-09-13 10:15:39

标签: c# asp.net .net sqlmembershipprovider

我遇到的情况是我需要让我的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'的私有字段,我试图使用上面相同的Reflection代码设置为false,希望强制提供程序每次重新初始化,但无效< / p>

1 个答案:

答案 0 :(得分:0)

是的,我现在对此进行了排序......

我已经创建了第二个SqlMembershipProvider(在web.config中和类似OP的类中)但是使用了不同的连接字符串。

然后我区分提供者,如:

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