如何指向不同环境的实体框架数据库上下文
本文关键字:实体 框架 数据库 上下文 环境 何指 | 更新日期: 2023-09-27 18:35:24
我有3个数据库DBDev,DBStaging和DBProduction。在我的应用程序中,我为每个数据库创建了 3 个 edmx。每个数据库都有一个匹配的实体,如下所示:DBDev -> DEVEntities、DBStaging -> StagingEntities 或 DBProduction -> ProductionEntities
我在web.config中选择要通过它访问的数据库:
<connectionStrings configSource="Configs'DBDev.config" /> <!-- or DBStaging or DBProduction-->
我将所有数据库访问路由到一个静态类:DBAccess。当我需要指向特定上下文时,我手动执行此操作:
private static DEVEntities db = new DEVEntities();
或
private static StagingEntities db = new StagingEntities();
或
private static ProductionEntities db = new ProductionEntities();
指向所需上下文而无需手动更改上下文的更智能方法是什么?
-
在配置文件中创建三个不同的连接字符串,如下所示:
<connectionStrings> <add name="DevConnection" connectionString="..." /> <add name="StagingConnection" connectionString="..." /> <add name="ProdConnection" connectionString="..." /> </connectionStrings>
-
在实体框架上下文类中,添加一个构造函数,该构造函数将连接字符串作为参数并调用相应的基构造函数:
public class MyEntities : ObjectContext // or DbContext { public MyEntities(string connectionString) : base(connectionString) {} }
-
通过传递连接字符串的名称来实例化实体上下文。您还可以使用依赖关系注入容器并将其配置为使用正确的值:
var context = new MyEntities("DevConnection");
另一个更符合 ALM 的解决方案:
-
创建设置
<连接字符串>
。 添加到两者
<连接字符串>