【问题标题】:Change EF Core context's connection string at runtime在运行时更改 EF Core 上下文的连接字符串
【发布时间】:2017-03-02 09:36:42
【问题描述】:

过去可以更改上下文的连接字符串,在创建之后。

我不知道如何使用 EF Core(和 SQLite)做到这一点。我正在以通常的方式注册上下文,使用 ASP.NET Core 内置的 IoC 容器。

services.AddDbContext<MyContext>(options =>
  options.UseSqlite(cfg.GetConnectionString("DefaultConnection")));

我无法更改 MyContext 类,因为它位于由其他人负责的单独程序集中。所以不能改构造函数,OnConfiguring()等

所以我需要使用新的连接字符串重新创建/初始化容器的当前实例。

有没有办法做到这一点?

【问题讨论】:

  • 请分享您的 startup.cs

标签: c# entity-framework asp.net-core entity-framework-core


【解决方案1】:

当然,你可以通过ConfigurationBuilder Startup 来完成

    var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    Configuration = builder.Build();

然后在你的上下文中使用它。如果ConfigurationBuilder 有reloadOnChange: true 将在更改时重新加载

【讨论】:

  • 我假设 OP 意味着他们想在运行时传递不同的连接字符串,而不是通过修改配置。
  • 容器是否在每次创建新的上下文实例时读取配置?看起来不像,因为它不需要 lambda,只需要一个字符串 options.UseSqlite(connectionString)。即使是这样,我也需要以编程方式更改连接字符串,所以我不能每次都编辑文件。有没有办法在代码中做到这一点?
  • 你可以创建一个函数来改变appsettings.json
  • ... 这将影响已经实例化的上下文。同样,不清楚 OP 是否想要这样。
  • @CodeCaster 我希望能够更改新上下文实例的连接字符串。但是更改配置文件不会那样做,反正我不这么认为。正如我上面写的,DbContext 配置不接受委托,只接受一个字符串。所以一旦设置好了,就设置好了,无法更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2017-11-17
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
相关资源
最近更新 更多