0

I want to connect my api to a SQL Server database. I am getting a null connection string value in my startup class. I totally don't know what I am doing wrong. Could you please check and let me know what should I correct? Thank you in advance.

Startup.cs

var connectionSettings = Configuration.GetSection("Connection").Get<ConnectionSettings>();

services.AddDbContextPool<Context>(
      options => options
            .UseSqlServer(connectionSettings.ConnectionString));

My appsettings.json connection is below:

"Connection": [
{
  "EFMode": "MSSQL",
  "DatabaseName": "Shop",
  "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Shop;Trusted_Connection=True,MultipleActiveResultSets=True"
}

In Program.cs (main class):

var db = services.GetService<Context>();

if (db != null)
{
    var cs = services.GetService<ConnectionSettings>();
    db.Database.Migrate();

    var dt = services.GetService<DefaultTriggers>();
}

And my Context.cs:

var connectionSettings = config.GetSection("Connection").Get<ConnectionSettings>();

var optionsBuilder = new DbContextOptionsBuilder<Context>();
optionsBuilder.UseSqlServer(connectionSettings.ConnectionString);

return new Context(optionsBuilder.Options);

ConnectionSettings.cs

    public class ConnectionSettings
{
    public string ConnectionString { get; set; }
    public string DatabaseName { get; set; }
}
4
  • Did you intend to have an array of Connection? Commented Jun 9, 2018 at 11:04
  • Yes. I forgot to show ConnectionSettings. Please find below the code: public class ConnectionSettings ' { public string ConnectionString { get; set; } public string DatabaseName { get; set; } }' Commented Jun 9, 2018 at 11:06
  • Can you put code in your question? You can edit it. Commented Jun 9, 2018 at 11:07
  • I did it. Thanks Commented Jun 9, 2018 at 11:08

2 Answers 2

1

You either have to change your settings so that you have a single connection object (note that I've removed the [ array ]:

"Connection": {
  "EFMode": "MSSQL",
  "DatabaseName": "Shop",
  "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Shop;Trusted_Connection=True,MultipleActiveResultSets=True"
}

Or you need to instruct the configuration object to load an array of ConnectionSettings:

var connectionSettings = Configuration.GetSection("Connection").Get<ConnectionSettings[]>();
var shopConnection = connectionSettings.First(s => s.DatabaseName == "Shop");
Sign up to request clarification or add additional context in comments.

Comments

0

You could simplify getting the connection string like this:

var connectionString = config["Connection:ConnectionString"];

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.