Implement IDbConnection in .Net Core

23.7k Views Asked by At

I have a .Net core web application and .net core library. When using Dapper, I need to pass in a concrete class that inherits from IDbConnection. The problem is that in .Net Core System.Data is not a viable reference, it looks like they are doing away with it.

Is there a .Net replacement or a nuget package I can use some where. I need to connect to Microsoft Sql Server 2016

Edit

I attempted to make a .Net Standard Library to see if I could use System.Data that way. And I also could not add System.Data to the new project.

Edit 2

I found a nuget package System.Data.Common. This seemed to work it had the interface IDbConnection however I can't see a way to connect to SQL. I would have to make my own implementation of IDbConnection. So I am at a loss again.

2

There are 2 best solutions below

5
On BEST ANSWER

Add System.Data.SqlClient nuget package as dependency. It has

//
// Summary:
//     Represents an open connection to a SQL Server database. This class cannot be
//     inherited.
public sealed class SqlConnection : DbConnection

so you will be able to do

using System.Data.SqlClient;    // As of 2019 using Microsoft.Data.SqlClient;
...

using (IDbConnection dbConnection = new SqlConnection(connectionString))
{
    dbConnection.Open();
    // dbConnection.Execute(query, data);
}
1
On
//create class for DBconnection
public class DBConnectionHelper
{
    private readonly string _connectionString;

    public DBConnectionHelper(string connectionString)
    {
        _connectionString = connectionString;
    }

    public IDbConnection ConnectToDatabase()
    {
        SqlConnection conn = new SqlConnection(_connectionString);
        try
        {
           // conn.AccessToken = new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider().GetAccessTokenAsync("https://database.windows.net/").Result;
            conn.Open();
        }
        catch (Exception)
        {
        }
        finally
        {
        }
        return conn;
    }
}

In startup class:

services.AddTransient(db => new DBConnectionHelper(AppSettings.ApplicationDBConnString).ConnectToDatabase());

And in apsetting.json:

"ConnectionStrings": {
 "ApplicationDBConnectionString": "server=....;Database=....;user id=....;Password=...;",