基于控制台应用程序管理员用户选择的静态方法的 DbContext 持久性

DbContext persistence with static method based on console application admin user selection

我有一个 DbContext class,只要控制台应用程序是 运行.

,我只想在其中设置一次正确的环境连接字符串
public class RPMContext : DbContext {    
    public RPMContext(string nameOrConnectionString)
        :base(nameOrConnectionString) {
    }  
}

然后用

调用
 private RPMContext db = new RPMContext("name=LH_RPMContext");

但是我需要保留一个静态全局方法,这样我就可以指望 运行 控制台应用程序的生命周期持续存在,它不会消失

我有一个这样的菜单系统

 Console.WriteLine("Select Environment:\n");
 Console.WriteLine("1. Localhost");
 Console.WriteLine("2. DEV");
 Console.WriteLine("3. QA");
 Console.WriteLine("4. Day 1");
 Console.WriteLine("5. Production\n");
 Console.Write("Number: ");
 byte environment = byte.Parse(Console.ReadLine());

所以我想如果用户选择 2 即 "DEV" 那么

 var dev_db = new RPMContext("name=DEV_RPMContext");

然而,稍后当我使用 Entity Framework 进行各种 CRUD 操作时,我会想再次实例化它……因此我只想将该值保存在内存中,对吗?

所以也许一些 enum 具有这些值,例如 DEV_RPMContext 然后设置它?

这是我的另一个问题:

一种选择是像这样编辑您的 DbContext 模板:

public class RPMContext : DbContext {
    public static string DefaultConnectionString;
    public RPMContext():base(DefaultConnectionString) {
    }   
    public RPMContext(string nameOrConnectionString)
        :base(nameOrConnectionString) {
    }  
}

然后在做出选择时,分配选定的连接字符串:

RPMContext.DefaultConnectionString = "your connection string";

然后像往常一样实例化上下文:

using (var ctx = new RPMContext()) {
// uses default connection string here
}