使用多个连接字符串

Hyp*_*ate 6 c# json connection-string asp.net-core-mvc asp.net-core

信息
我的解决方案中有多个项目,其中一个是DAL,另一个是ASP.NET MVC6项目.由于MVC6项目也是启动项目,我需要在那里添加我的连接字符串.

我看到了这个解决方案,但它不被接受,也没有用.

我的尝试
appsettings.json

"Data": {
  "DefaultConnection": {
    "ConnectionString": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "FooBar": {
    "ConnectionString": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}
Run Code Online (Sandbox Code Playgroud)

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]))
             .AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration["Data:FooBar:ConnectionString"]));
}
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试使用FooBar连接字符串访问数据时,我收到以下消息:

"附加信息:在应用程序配置文件中找不到名为'FooBar'的连接字符串."

问题
如何让多个连接字符串工作?

Nko*_*osi 8

如果你看看asp.net核心中连接字符串官方文档,他们的例子显示了appsettings.json这样存储的连接字符串

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}
Run Code Online (Sandbox Code Playgroud)

哪个,适应你的例子就会变成.

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true",
    "FooBar": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}
Run Code Online (Sandbox Code Playgroud)

Startup.cs使用从配置中读取的配置字符串配置上下文将使用GetConnectionString()带有配置键的方法

public void ConfigureServices(IServiceCollection services) {
    // Add framework services.
    services
        .AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnextionString("DefaultConnection")))
        .AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnextionString("FooBar")));
}
Run Code Online (Sandbox Code Playgroud)

现在,在原始问题中如何配置上述上下文的一个观察问题是,现在有两个连接字符串用于相同的上下文.

尝试使用多个连接字符串来处理相同的上下文会导致问题,因为框架在请求上下文时不知道使用哪个选项.