如何指向不同环境的实体框架数据库上下文

本文关键字:实体 框架 数据库 上下文 环境 何指 | 更新日期: 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();

指向所需上下文而无需手动更改上下文的更智能方法是什么?

如何指向不同环境的实体框架数据库上下文

  1. 在配置文件中创建三个不同的连接字符串,如下所示:

    <connectionStrings>
      <add name="DevConnection" connectionString="..." />
      <add name="StagingConnection" connectionString="..." />
      <add name="ProdConnection" connectionString="..." />
    </connectionStrings>
    
  2. 在实体框架上下文类中,添加一个构造函数,该构造函数将连接字符串作为参数并调用相应的基构造函数:

    public class MyEntities : ObjectContext // or DbContext
    {
        public MyEntities(string connectionString) : base(connectionString) {}
    }
    
  3. 通过传递连接字符串的名称来实例化实体上下文。您还可以使用依赖关系注入容器并将其配置为使用正确的值:

    var context = new MyEntities("DevConnection");
    

另一个更符合 ALM 的解决方案:

  1. 创建设置

    <连接字符串>

  2. 添加到两者

    <连接字符串>