ConfigurationManager.ConnectionStrings[Web].ConnectionString имеет значение NULL ASP NET CORE MVC 3.1

кажется, что соединение с моей базой данных вообще не работает, но я не знаю, почему.

Таким образом, вы можете увидеть ошибку прямо здесь: ошибка

А теперь давайте посмотрим на код 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;"
}

Запуск.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);
    }
    [...]
}

Есть ли у вас какие-либо идеи ?


person Hashka    schedule 16.12.2020    source источник
comment
ConfigurationManager получают значение не из appsettings.json, а из App.config или Web.config. Вам нужно переписать CoreDataBase для ввода настроек строки подключения.   -  person vernou    schedule 16.12.2020
comment
начните с использования расширений конфигурации вместо диспетчера конфигурации.   -  person Doruk    schedule 16.12.2020
comment
Обратите внимание, что ASP.NET Core использует другие параметры конфигурации, файл по умолчанию, в котором хранятся данные конфигурации для приложения, используемого в шаблонах проектов ASP.NET Core, имеет значение appsettings.json, а не Web.config, используемый в проекте ASP.NET. Вы можете прочитать эти данные из файла appsettings.json через экземпляр IConfiguration, который вы внедрили.   -  person Fei Han    schedule 16.12.2020


Ответы (1)


Я думаю, что ваш ConfigurationManager имеет значение null.

Надеюсь, этот фрагмент вместе со ссылкой ниже помогут вам в этом. Впрыск более аккуратный.

// 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);
    }
    [...]
}

Как прочитать строку подключения С PROVIDER в .NET Core?

person Neil W    schedule 16.12.2020