My Web APi调用使用EF Context处理数据的Repository层。上下文调用
public MyContext()
: base("name=MyDbContext")
{
}
MyDbContext在WebConfig中定义。
现在问题是我拥有许多相同数据库的副本,登录的用户将确定要使用哪个数据库。我想找到一种在运行时动态传递Connection String的方法。
请告知
谢谢,
答案 0 :(得分:1)
只需将其他构造函数添加到您自己的上下文中,如果将连接字符串传递给基础构造函数,EF将使用此构造函数。
public MyContext()
: base("name=MyDbContext")
{
}
public MyContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
现在当你调用构造函数时,只需传递正确的Connectionstring。
答案 1 :(得分:1)
我知道您只询问了连接字符串,但是在迁移和多数据库控制方面,传递连接的选项在EF中更容易使用。
public static DbConnection GetSqlConn4DBName(string dbName) {
var sqlConnFact = new SqlConnectionFactory(
"Data Source=localhost; Integrated Security=True; MultipleActiveResultSets=True");
var sqlConn = sqlConnFact.CreateConnection(dbName);
return sqlConn;
}
use
var dbName = "MyDB1";
var sqlConn = GetSqlConn4DBName(dbName);
var context = new Ef6Ctx(sqlConn);
but equally
var context = new Ef6Ctx("Data Source=localhost;Initial Catalog=MyDBName ;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" );
你的上下文构造函数实际上也可以使用各种构造函数。
public class Ef6Ctx3 : DbContext {
public Ef6Ctx3() : base("ConnName"){ } // default Connection
public Ef6Ctx3(DbConnection dbConn) : base(dbConn, true) { }
public Ef6Ctx3(string connectionNameOrString) : base(connectionNameOrString) { }
}
答案 2 :(得分:0)
您可以提供已指定连接字符串的连接
public MyContext(SqlConnection connection)
: base(connection, true)
{
}