将 ASP.Net SqlMemberProvider 与多个数据库一起使用

本文关键字:数据库 一起 ASP Net SqlMemberProvider | 更新日期: 2023-09-27 18:31:07

我需要让我的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,希望每次都强制提供程序重新初始化,但无济于事

将 ASP.Net SqlMemberProvider 与多个数据库一起使用

对,我现在已经解决了这个问题...

我创建了第二个 SqlMemberProvider(在 web.config 和类中(如在 OP 中),但具有不同的连接字符串。

然后,我像这样区分提供程序:

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