信息
我的解决方案中有多个项目,其中一个是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'的连接字符串 在应用程序配置文件中找到。“
问题
如何使多个连接字符串工作?
答案 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");
然后,您需要为所有需要使用的所有连接字符串做最后一遍。