using DI and Dapper in Asp.net Core
前言
很久以前自己寫過一個打包整層ADO.net技術的SqlHelper類別,分享自己存取資料庫使用的SqlHelper類別,ADO.net技術
缺點是產生出來的結果是弱型別:DataTable、DataRow
其實從Nuget可以安裝Dapper這玩意兒,用法和SQLHelper類似,也是在程式中寫下SQL語法就可以存取資料庫,而且產生出來的結果支援強型別
本文記錄一下如何在ASP.net Core中利用DI注入方式使用Dapper,讓"指派資料庫連線"的程式碼寫在Startup.cs,增加程式碼的簡潔
Dapper 專案網址(裡頭有Dapper完整用法說明):https://github.com/StackExchange/Dapper
實作
Startup.cs的片段程式碼↓
using System.Data.SqlClient;
using System.Data.Common;
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
//Scoped:注入的物件在同一Request中,參考的都是相同物件(你在Controller、View中注入的IDbConnection指向相同參考)
services.AddScoped<IDbConnection,SqlConnection>(serviceProvider => {
SqlConnection conn = new SqlConnection();
//指派連線字串
conn.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
return conn;
});
services.AddControllersWithViews();
}
Controller的片段程式碼↓
using System.Data.Common;
public class HomeController : Controller
{
private readonly IDbConnection _conn;
public HomeController(IDbConnection conn)
{
this._conn = conn;
}
public IActionResult Index()
{
//Dapper查詢資料,注意不能用IEnumerable<DataRow>來接結果
IEnumerable<dynamic> rows = this._conn.Query("Select * from ApplicableProduct");
StringBuilder sb = new StringBuilder();
foreach (dynamic row in rows)
{
sb.AppendLine(row.Product1);
}//end foreach
string result = sb.ToString();
return Content(result);//直接顯示結果
}
}