If you define your DAL in a .NET Standard 2.0 class library, you could use both SqlConnection and SqlCommand, e.g.:
public class MyDal
{
private readonly string _connectionString;
public MyDal(string connectionString)
{
_connectionString = connectionString;
}
public IEnumerable<string> GetSomeData()
{
using (SqlConnection conn = new SqlConnection())
{
using (SqlCommand command = new SqlCommand(_connectionString, conn))
{
...
}
}
}
}
You then add a reference to your library from your ASP.NET Core app.
Using the built-in support for dependency injection, you can inject the controllers with an IConfiguration:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton(Configuration);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseMvc();
}
}
...that you use like this to extract the connection string:
public class ValuesController : Controller
{
private readonly IConfiguration _config;
public ValuesController(IConfiguration config)
{
_config = config;
}
[HttpGet]
public IEnumerable<string> Get()
{
MyDal dal = new MyDal(_config.GetConnectionString("conn"));
return dal.GetSomeData();
}
}
The connection string itself is defined in appsettings.json:
{
"ConnectionStrings": {
"conn": "Server=localhost;Database=database;Trusted_Connection=True;"
},
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
}