Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.Net CORE Dapper Connection String?

I am setting up my first .NET Core application. I am going to user Dapper (1.50.0-rc2) for the ORM.

I have added the following to my appsettings.json file.

"Data": {
    "DefaultConnection": {
        "ConnectionString": "user id=exampleusername;password=examplepassword;Data Source=db.example.com;Database=exampledb;"
    }
},

I am confused at how to get the value of ConnectionString. As .NET Core is so new, online examples are all over the place and none seem to actually cover this.

like image 936
eat-sleep-code Avatar asked Dec 24 '22 05:12

eat-sleep-code


2 Answers

My walkthrough:

  1. Add ConnectionStrings section in appsettings.json:

    "ConnectionStrings": {
       "cs1": "Server=xxxx;Port=xxxx;Database=xxxx; User Id=xxxx;Password=xxxx;Pooling=false;",
       "cs2": "Server=xxxx;Port=xxxx;Database=xxxx; User Id=xxxx;Password=xxxx;Pooling=false;",
       "cs3": "Server=xxxx;Port=xxxx;Database=xxxx; User Id=xxxx;Password=xxxx;Pooling=false;"
    },
  2. Create class that represents the connection strings section:

    public class ConnectionStringList
    {
        public string cs1 { get; set; }
        public string cs2 { get; set; }
        public string cs3 { get; set; }
    }
  3. Open Startup.cs and add the above configuration class to the services collection in ConfigureServices:

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddOptions();
        services.Configure<ConnectionStringList>(Configuration.GetSection("ConnectionStrings"));
    }
  4. Inject IOptions<ConnectionStringList> into your controller/service etc. and retreive your connection string value from Value property:

    public SampleController(IOptions<ConnectionStringList> connectionStrings)
    {
        string cs1 = connectionStrings.Value.cs1;
        ...
like image 106
tarn Avatar answered Feb 04 '23 02:02

tarn


I have a sample Console App for .NET core on my GitHub repository

Setup phase

var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

Build phase

Configuration = builder.Build();

Use phase

Configuration.GetConnectionString("DefaultConnection")

You can use this value for Dapper

P.S.

You need to add 3 dependencies into your project.json

"Microsoft.Extensions.Configuration": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final"

UPDATED

Specific solution

make Configuration static property and add private setter

public static IConfigurationRoot Configuration { get; private set; }

and change your extension

namespace GamesCore.Extensions 
{
    public class ScoreExtensions 
    { 
        private static string dataConnectionString = Startup.Configuration.GetConnectionString("DefaultConnection"); 
    } 
}

For .NET Core 2.0 everything is same and only project file is changed so you need to use following packages:

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.2" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.2" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.2" />
  </ItemGroup>
like image 26
Mike Avatar answered Feb 04 '23 02:02

Mike