我已经看过几篇关于此的帖子,但未能从回复中创建可用的解决方案。也许是由于缺乏了解。
提供的托管要求在登台和制作时使用相同的代码库,包括连接字符串。
如何切换DbContext的连接字符串?
我知道我可以这样做:
public FooEntities() : base("ApplicationServices") { }
但这不是动态的 - 它只是在运行时设置它。
那么我如何在运行时实际选择连接字符串?
答案 0 :(得分:5)
是public FooEntities() : base("ApplicationServices") { }
FooEntities
继承自ObjectContext
你也可以写
public FooEntities() : base(YourStaticMethodToGetConnectionString()) { }
然后,您可以根据某些环境设置从web.config中提取连接字符串
答案 1 :(得分:0)
我现在正在审核这个问题,因为我将开发本地,然后部署到云端。因此,希望动态切换数据上下文使用的连接字符串。我的计划是在标准" connectionStrings"中配置所需的连接字符串。 Web.config的一部分,然后将逻辑放在DbContext构造函数中,如:
public partial class MyApplicationDbContext : DbContext
{
public MyApplicationDbContext()
: base("name=cloud")
{
Database.Connection.ConnectionString =
ConnectionStringHelpers.GetHostBasedConnectionString();
}
// abbreviated..
}
替代:
public partial class MyApplicationDbContext : DbContext
{
public MyApplicationDbContext()
: base(ConnectionStringHelpers.GetHostBasedConnectionString())
{
}
// abbreviated..
}
助手:
public class ConnectionStringHelpers
{
public static string GetHostBasedConnectionString()
{
return GetConnectionStringByName(GetHostBasedConnectiongStringName());
}
public static string GetHostBasedConnectiongStringName()
{
switch (System.Net.Dns.GetHostName())
{
case "myHostname": return "local"; // My local connection
case "ip-ABCD123": return "cloud"; // Cloud PaaS connection
default: return "cloud";
}
}
public static string GetConnectionStringByName(string name)
{
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}
}
在我的Web.config文件中:
<connectionStrings>
<add name="local" connectionString="..." providerName="System.Data.SqlClient" />
<add name="cloud" connectionString="..." providerName="System.Data.SqlClient" />
</connectionStrings>