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



我有一个DbContext类,只要控制台应用程序正在运行,我只想在其中设置一次正确的环境连接字符串。

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. Productionn");
 Console.Write("Number: ");
 byte environment = byte.Parse(Console.ReadLine());

所以我想如果用户选择2哪个是"DEV",那么

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

但是稍后当我使用实体框架执行各种 CRUD 操作时,我将希望再次实例化它......因此,我只想将该值保存在内存中,对吗?

所以也许一些enumDEV_RPMContext这样的值,然后设置它?

这是我的另一个问题:使用基类将字符串传递到 DbContext 的构造函数中不会设置值

一种选择是像这样编辑 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
}

相关内容

  • 没有找到相关文章

最新更新