我想在运行时提供数据库的连接字符串,我正在使用Entity Framework。以下是我目前的代码:
class MyClassDBContext:DbContext
{
public MyClassDBContext(string str) : base(str)
{
this.Database.Connection.ConnectionString = str;
}
}
为了使用上述代码,我尝试了
//create connection string
EntityConnectionStringBuilder myConn = new EntityConnectionStringBuilder();
myConn.Provider = "System.Data.SqlClient";
myConn.ProviderConnectionString = "user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30";
//inject the connection string at runtime
MyClassDBContext a = new MyClassDBContext(myConn.ToString())
以上代码给我返回了一个错误,说“提供程序关键字不受支持”。为了尝试调试此错误,我尝试了以下操作:
MyClassDBContext a = new MyClassDBContext("metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
现在,我收到了一个错误,说“不支持元数据关键字”。所以我修改了我的代码为:
MyClassDBContext a = new MyClassDBContext("provider=System.Data.SqlClient;provider connection string=user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
现在我收到一个错误,说“不支持提供程序关键字”。所以我再次更改了我的代码:
MyClassDBContext a = new MyClassDBContext("user id=xxxx;password=xxxx;server=localhost;database=xxxx;connection timeout=30")
现在它运行良好!我的问题是:如何在运行时指定提供程序和元数据?似乎只接受连接字符串。我正在使用来自Nuget的Entity 4.3.1。
谢谢
Provider="System.Data.Entity"
和ConnectionString="res://big.csdl|res://ball.ssdl|res://mud.msl; provider connection string="..."
。普通的连接字符串包含Provider="System.Data.Client"
(或Oracle或MySql)和ConnectionString="details to connect to it"
。这两个参数通常在app.config或web.config中,但您选择动态构造它们。在EF Code First中,您采用第二种方法。在EDMX领域中,您必须将第二条路径的详细信息嵌入到第一条路径的“Provider Connection String”中。这很丑陋。 - robrichSqlConnectionStringBuilder
兼容(而不是SqlConnectionBuilder
)。 - Malick