0

it seems that the connection to my database is not working at all, but I don't know why.

So you can see the error right there : error

& now let's see the code, 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);
    }
    [...]
}

Do you have any idea ?

Hashka
  • 395
  • 3
  • 10
  • `ConfigurationManager` don't get value from appsettings.json, but from App.config or Web.config. You need rewrite `CoreDataBase` to inject connection string settings. – vernou Dec 16 '20 at 09:38
  • start with using configuration extensions instead of configuration manager. – Doruk Dec 16 '20 at 09:41
  • 1
    Please note that [ASP.NET Core use different configuration settings](https://learn.microsoft.com/en-us/aspnet/core/migration/proper-to-2x/?view=aspnetcore-3.1#store-configurations), the default file that stores configuration data for the application used in the ASP.NET Core project templates is `appsettings.json`, not same as the `Web.config` used in ASP.NET project. You can read these data from `appsettings.json` file via an instance of IConfiguration that you injected. – Fei Han Dec 16 '20 at 10:08

1 Answers1

-1

I think your "ConfigurationManager" is null.

Hopefully this snippet, along with the link below will get you on your way. Injection is tidier.

// 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?

Neil W
  • 7,670
  • 3
  • 28
  • 41