【问题标题】:ConfigurationManager.ConnectionStrings["Web"].ConnectionString is NULL ASP NET CORE MVC 3.1ConfigurationManager.ConnectionStrings["Web"].ConnectionString 为 NULL ASP NET CORE MVC 3.1
【发布时间】:2021-03-26 22:50:04
【问题描述】:

似乎与我的数据库的连接根本不起作用,但我不知道为什么。

所以你可以在那里看到错误:

& 现在让我们看看代码,appsettings.json:

"ConnectionStrings": {
    "Web": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xx.xx.x.xxx)(PORT=xxxx))(CONNECT_DATA=(SERVICE_NAME=xxxxxxx)));User Id=xxxxx;Password=xxxxx;"
}

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    [...]
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseOracle(Configuration.GetConnectionString("Web")));
    [...]
}

HomeController.cs:

public class HomeController : Controller
{
    [...]
    private readonly CoreDataBase dataBase = new CoreDataBase();
    [...]
}

CoreDataBase.cs:

public class CoreDataBase : IDisposable
{
    private IDatabase _core = null;

    public CoreDataBase()
    {
        _core = Load();
    }

    private static Database Load()
    {
        var connectionString = ConfigurationManager.ConnectionStrings["Web"].ConnectionString;
        var provider = ConfigurationManager.ConnectionStrings["Web"].ProviderName;
        if(provider != "Oracle.ManagedDataAccess.Client")
        {
            return null;
        }
        return new Database(connectionString, DatabaseType.OracleManaged, SqlClientFactory.Instance);
    }
    [...]
}

你有什么想法吗?

【问题讨论】:

  • ConfigurationManager 不是从 appsettings.json 中获取值,而是从 App.config 或 Web.config 中获取值。您需要重写CoreDataBase 以注入连接字符串设置。
  • 从使用配置扩展而不是配置管理器开始。
  • 请注意ASP.NET Core use different configuration settings,ASP.NET Core项目模板中使用的应用程序存储配置数据的默认文件是appsettings.json,与ASP中使用的Web.config不同。网络项目。您可以通过您注入的 IConfiguration 实例从 appsettings.json 文件中读取这些数据。

标签: c# oracle asp.net-core connection-string configurationmanager


【解决方案1】:

我认为您的“ConfigurationManager”为空。

希望这个 sn-p 以及下面的链接能让您顺利上路。注射更整齐。

// Import Configuration Extensions
using Microsoft.Extensions.Configuration;

public class CoreDataBase : IDisposable
{
    private IDatabase _core = null;

    public CoreDataBase()
    {
        _core = Load();
    }

    private static Database Load()
    {
        // Get Instance of Configuration with appsettings.json
        IConfigurationBuilder cfgBuilder = new ConfigurationBuilder();
        cfgBuilder.AddJsonFile("appsettings.json");
        IConfiguration cfg = cfgBuilder.Build();

        var connectionString = cfg["ConnectionStrings:Web"];

        [...]
        var connectionString = ConfigurationManager.ConnectionStrings["Web"].ConnectionString;
        var provider = ConfigurationManager.ConnectionStrings["Web"].ProviderName;
        if(provider != "Oracle.ManagedDataAccess.Client")
        {
            return null;
        }
        return new Database(connectionString, DatabaseType.OracleManaged, SqlClientFactory.Instance);
    }
    [...]
}

How to read a connectionString WITH PROVIDER in .NET Core?

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2020-08-06
    • 2022-11-15
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多