使用多个连接字符串

时间:2017-01-07 19:58:47

标签: c# json asp.net-core asp.net-core-mvc connection-string

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

我看到了this solution,但它不被接受,也没有用。

我的尝试
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"
  }
}

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"]));
}

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

  

“附加信息:没有名为'FooBar'的连接字符串   在应用程序配置文件中找到。“

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

2 个答案:

答案 0 :(得分:7)

如果您查看asp.net核心中的official documentation for connection strings,他们的示例会显示appsettings.json中存储的连接字符串

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

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

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true",
    "FooBar": "Server=.\\SQLEXPRESS;Database=Bar;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

使用从配置中读取的配置字符串在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"));
}

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

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

答案 1 :(得分:0)

在.net core 3.x中进行配置所需的内容是这样的 或者您在启动时注入了Iconfiguration(这是用于带有args的命令行项目)。

        IConfiguration Configuration = new ConfigurationBuilder()
       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
       .AddEnvironmentVariables()
       .AddCommandLine(args)
       .Build();

        string conString = Microsoft
               .Extensions
               .Configuration
               .ConfigurationExtensions
               .GetConnectionString(Configuration, "ConnectionName");

然后,您需要为所有需要使用的所有连接字符串做最后一遍。