我有一个场景,我的应用程序连接到url中子域的不同数据库。
我试过这段代码:
public class Provider : SqlMembershipProvider
{
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
base.Initialize(name, config);
// Update the private connection string field in the base class.
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
sqlBuilder["Data Source"] = "My-PC\\SQLEXPRESS";
string dbName;
if (!string.IsNullOrEmpty(Helpers.RouteManager.GetSubDomain()))
{
dbName = Helpers.RouteManager.GetSubDomain().ToString()+"_db";
}
else
{
dbName = "dbName";
}
bool isEqual = string.Equals(name, dbName);
sqlBuilder["Initial Catalog"] = dbName;
sqlBuilder["Integrated Security"] = true;
sqlBuilder["Application Name"] = "EntityFramework";
FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
connectionStringField.SetValue(this, sqlBuilder.ConnectionString);
}
}
我从Application_BeginRequest()
方法调用此函数。
我面临的问题是,当我构建应用程序并且它使用特定的子域命中url时,它会连接到指定的数据库,但我尝试使用不同的子域,它与asp.net成员资格相同的数据库。< / p>
但是,当我重建应用程序并尝试另一个子域时,它可以工作。
在构建解决方案后,我的代码似乎只是第一次工作。
请有人指导我。
感谢名单
答案 0 :(得分:1)
尝试在Web配置文件中配置不同的成员资格提供程序。
<membership>
<providers>
<add name="ProviderA" connectionStringName="ConnectionA" ... />
<add name="ProviderB" connectionStringName="ConnectionB" ... />
</providers>
</membership>
<connectionStrings>
<add name="ConnectionA" .... />
<add name="ConnectionB" .... />
</connectionStrings>
然后在代码中使用此提供程序
var user = Membership.Providers["ProviderA"].GetUser(username, false);
var user = Membership.Providers["ProviderB"].GetUser(username, false);
答案 1 :(得分:0)
<强>更新强> 我刚刚在stackoverflow上找到了这个答案。我担心看起来你想做的事情是不可能的,因为成员资格提供者是你的应用程序的所有用户之间共享的全局静态对象。基于URL更改它不仅会为该特定用户更改它,而且会为每个登录的用户更改它 check it out here