如何指向不同环境的Entity Framework DB Context

use*_*042 4 c# model-view-controller entity-framework

我有3个数据库DBDev,DBStaging和DBProduction.在我的应用程序内部,我为每个数据库创建了3个edmx.每个DB都有一个匹配的实体,如下所示:DBDev - > DEVEntities,DBStaging - > StagingEntities或DBProduction - > ProductionEntities

我在web.config中选择要通过此访问的数据库:

<connectionStrings configSource="Configs\DBDev.config" /> <!-- or DBStaging or DBProduction-->
Run Code Online (Sandbox Code Playgroud)

我将我的所有数据库访问路由到一个静态类:DBAccess.当我需要指向特定的上下文时,我手动执行此操作:

private static DEVEntities db = new DEVEntities();
Run Code Online (Sandbox Code Playgroud)

要么

private static StagingEntities db = new StagingEntities();
Run Code Online (Sandbox Code Playgroud)

要么

private static ProductionEntities db = new ProductionEntities();
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ank 5

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

    <connectionStrings>
      <add name="DevConnection" connectionString="..." />
      <add name="StagingConnection" connectionString="..." />
      <add name="ProdConnection" connectionString="..." />
    </connectionStrings>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在Entity Framework上下文类中,添加一个构造函数,该构造函数将连接字符串作为参数并调用相应的基本构造函数:

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

    var context = new MyEntities("DevConnection");
    
    Run Code Online (Sandbox Code Playgroud)