我无法理解如何在ASP .NET Core中检索连接字符串。我尝试了两天所有不同的方法,但都无法使其正常工作。
我尝试了以下几种方法:
- 使用ConfigurationManager.AppSettings,计数返回0
- 使用ConfigurationManager.ConnectionStrings[] .ConnectionString - 唯一存在的连接字符串是到.\SQLEXPRESS(必须在ConnectionStrings []中使用索引而不是字符串),指定连接名称会导致对象引用未设置错误
- 尝试使用WebConfigurationManager找不到如何添加它。我已经尝试了System.Web.Configuration、NuGet包和引用。
- 使用IConfiguration和依赖注入 - 我不知道如何读取连接字符串(如何引用控制器中的模型并读取“xxx”连接字符串的值)
ConfigurationManager.ConnectionStrings["SupplierDB"].ConnectionString
// NullReferenceException: Object reference not set to an instance of an object.
ConfigurationManager.ConnectionStrings[0].ConnectionString
// data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
ConfigurationManager.AppSettings.Count.ToString();
// Returns 0
我在appsettings.json和web.config中都指定了相同的连接字符串。由于什么都不行,我完全迷失了方向,请有人能给予指点。
appsettings.json
{
"ConnectionStrings": {
"CustomerDB": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Customer_Db;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
"SupplierDB": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Supplier_Db;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="CustomerDB" providerName="System.Data.SqlClient" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Customer_Db;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"/>
<add name="SupplierDB" providerName="System.Data.SqlClient" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Supplier_Db;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"/>
</connectionStrings>
</configuration>