EF6中如何根据工作环境为DataContext动态传递连接字符串
实现步骤
- 首先确认项目已引用
System.Configuration程序集,在HAZID_DataContext所在的类文件顶部引入命名空间:
using System.Configuration;
- 修改
HAZID_DataContext的构造方法,实现环境配置读取和连接字符串名称映射:
public HAZID_DataContext() : base(GetConnectionStringName()) { System.Data.Entity.SqlServer.SqlProviderServices.UseScopeIdentity = false; } // 新增私有静态方法获取对应环境的连接字符串名称 private static string GetConnectionStringName() { // 读取配置的工作环境 string workEnv = ConfigurationManager.AppSettings["WorkEnvironment"]?.Trim() ?? "Development"; // 按环境映射连接字符串名称,C#版本低于7.0不支持switch表达式的话可以替换为下方的普通switch写法 return workEnv switch { "Development" => "HAZIDDEV", "Test" => "HAZIDTEST", "Production" => "HAZIDPROD", // 未匹配到的环境默认走开发库,也可以根据需求抛出配置异常 _ => "HAZIDDEV" }; }
低版本C#兼容写法:
private static string GetConnectionStringName() { string workEnv = ConfigurationManager.AppSettings["WorkEnvironment"]?.Trim() ?? "Development"; switch (workEnv) { case "Test": return "HAZIDTEST"; case "Production": return "HAZIDPROD"; case "Development": default: return "HAZIDDEV"; } }
- 补全Web.config的
connectionStrings节点,新增生产环境连接配置:
<connectionStrings> <add name="HAZIDTEST" connectionString="Server=DTISQLVS02\DEVELOPMENT;Database=HAZID;Trusted_Connection=True;" providerName="System.Data.SqlClient" /> <add name="HAZIDDEV" connectionString="Server=DTIDEV27;Database=HAZIDDEV;Trusted_Connection=True;" providerName="System.Data.SqlClient" /> <!-- 新增生产环境连接字符串,替换为实际的生产库配置 --> <add name="HAZIDPROD" connectionString="你的生产库连接地址" providerName="System.Data.SqlClient" /> </connectionStrings>
使用方式
后续切换环境只需要修改Web.config中appSettings节点的WorkEnvironment值即可:
- 开发环境设为
Development - 测试环境设为
Test - 生产环境设为
Production
内容的提问来源于stack exchange,提问作者Carl Cummings
相关产品推荐
相关产品推荐

