EF6的DbContext动态连接字符串 [英] EF6 DBContext Dynamic Connection String
问题描述
公共部分类ProcessContext:的DbContext
{
静态ProcessContext()
{
Database.SetInitializer< ProcessContext>(NULL);
} 公共ProcessContext()
:基地(NAME = ProcessCS)//从配置文件来自
{
} --DBSets
保护覆盖无效OnModelCreating(DbModelBuilder模型构建器)
{
- code
}
}
这是一个多Tenent DB,我们有3个不同的DB。集中DB是在共同的位置和将不被改变。这是的DB细节其余部分将被保存。我需要创造一个细节将从这种集中DB中传来的连接字符串@运行。可有一个人请让我知道如何去了解呢?
我试着用下面的code,但它不工作。该方法将在这里被称为
公共ProcessContext()
:基地(nameOrConnectionString:的ConnectionString())
{
}私人静态字符串的ConnectionString()
{
SqlConnectionStringBuilder sqlBuilder =新SqlConnectionStringBuilder();
sqlBuilder.DataSource =XXX;
sqlBuilder.InitialCatalog =YYY;
sqlBuilder.PersistSecurityInfo = TRUE;
sqlBuilder.IntegratedSecurity = TRUE;
sqlBuilder.MultipleActiveResultSets = TRUE; EntityConnectionStringBuilder entityBuilder =新EntityConnectionStringBuilder();
entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
entityBuilder.Metadata =RES:// * /;
entityBuilder.Provider =System.Data.SqlClient的; 返回entityBuilder.ToString();
}
有关SQL Server连接,覆盖实体容器类:(EF6中的作品,SQL Server 2012的前preSS,VS2013)
公共部分类PxxxxEntities
{
私人PxxxxEntities(字符串的connectionString)
:基地(的connectionString)
{
} 公共静态PxxxxEntities ConnectToSqlServer(字符串主机,串目录,用户字符串,字符串传递,布尔winAuth)
{
SqlConnectionStringBuilder sqlBuilder =新SqlConnectionStringBuilder
{
数据源=主机,
InitialCatalog =目录,
PersistSecurityInfo = TRUE,
IntegratedSecurity = winAuth,
MultipleActiveResultSets = TRUE, 用户名=用户,
密码=传球,
}; //在MyDbEntities中的.config假定的connectionString名
VAR entityConnectionStringBuilder =新EntityConnectionStringBuilder
{
供应商=System.Data.SqlClient的
ProviderConnectionString = sqlBuilder.ConnectionString,
元数据=RES://*/DbModel.csdl |高分辨率://*/DbModel.ssdl |高分辨率://*/DbModel.msl
}; 返回新PxxxxEntities(entityConnectionStringBuilder.ConnectionString);
}
}
public partial class ProcessContext : DbContext
{
static ProcessContext()
{
Database.SetInitializer<ProcessContext>(null);
}
public ProcessContext()
: base("Name=ProcessCS") //Comes from Config File
{
}
--DBSets
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
--Code
}
}
This is a Multi Tenent DB where we have 3 Different DB's. Centralized DB is in common location and would not be changed. This is where rest of the DB details will be stored. I need to create the Connection string @ runtime where the details will be coming from this centralized DB. Can some one please let me know how to go about it?
I tried with the following code, but it is not working. This Method will be called here
public ProcessContext()
: base(nameOrConnectionString: ConnectionString())
{
}
private static string ConnectionString()
{
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
sqlBuilder.DataSource = "XXX";
sqlBuilder.InitialCatalog = "YYY";
sqlBuilder.PersistSecurityInfo = true;
sqlBuilder.IntegratedSecurity = true;
sqlBuilder.MultipleActiveResultSets = true;
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
entityBuilder.Metadata = "res://*/";
entityBuilder.Provider = "System.Data.SqlClient";
return entityBuilder.ToString();
}
For SQL Server connection, override the entity container class: (works in EF6, SQL server 2012 express, VS2013)
public partial class PxxxxEntities
{
private PxxxxEntities(string connectionString)
: base(connectionString)
{
}
public static PxxxxEntities ConnectToSqlServer(string host, string catalog, string user, string pass, bool winAuth)
{
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder
{
DataSource = host,
InitialCatalog = catalog,
PersistSecurityInfo = true,
IntegratedSecurity = winAuth,
MultipleActiveResultSets = true,
UserID = user,
Password = pass,
};
// assumes a connectionString name in .config of MyDbEntities
var entityConnectionStringBuilder = new EntityConnectionStringBuilder
{
Provider = "System.Data.SqlClient",
ProviderConnectionString = sqlBuilder.ConnectionString,
Metadata = "res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl",
};
return new PxxxxEntities(entityConnectionStringBuilder.ConnectionString);
}
}
这篇关于EF6的DbContext动态连接字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!