影片講解(有字幕)
上一篇我們已經建立好了資料庫的相關連線設定,那接下來就要來示範如何從資料庫取出資料。
那可以先到SQL Server物件總管理看我準備的資料庫有5筆資料。
接著我們到Controllers資料夾下創一個新的TodoController。
看到上半部的地方
namespace Todo.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
private readonly TodoContext _todoContext;
// GET: api/<TodoController>
public TodoController(TodoContext todoContext)
{
_todoContext = todoContext;
}
// GET: api/<TodoController>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
}
我們加入一個private readonly
全域變數,其中TodoContext
是你創的DB物件類別名稱,_todoContext
則是變數名稱,這邊習慣小寫然後加一個底線,你想其他寫法也行。
然後在建構子的地方public TodoController(TodoContext todoContext)
會得到一個參數,TodoContext todoContext
,這就是Core裡面的DI注入取用類別的方式,在Startup.cs裡面所注入的服務,都是用這個方法去取得使用的,後面會再詳細介紹什麼是DI相依性注入。
接著我們在建構子裡面就將全域變數_todoContext
等於todoContext
即可。
那使用DI的架構能為我們帶來一些維護上和生命週期管理的好處,在今天的範例中,如果有寫過之前非DI的架構的人,可以知道在new出一個新的資料庫物件後,還要自行open、close、Dispose,否則就有可能連線數或資源耗盡,那這些程式碼不僅礙眼也一值重複出現在你的程式片段裡。
但今天在Core裡面使用DI後,它其中一個好處就是幫你管理這個物件的生命週期,時間到了,資源也跟著釋放,所以你只要專注在你的商業邏輯上,再也不用人工控制這個物件的狀態管裡。
那接著我們就要開始使用這個資料庫物件進行資料讀取了,讀取方式如下。
[HttpGet]
public IEnumerable<TodoList> Get()
{
return _todoContext.TodoLists;
}
在我們Get()的方法中,我們改回傳一個_todoContext.TodoLists
,然後上面的回傳類別改成TodoList
,這樣就可以從資料庫中取得TodoList資料表中所有的資料。
按下啟動不偵錯,並且在網址打上/api/todo,就會出現結果,如下圖。
就這樣,我們就能輕鬆的就從資料庫中取回資料,並且返回client端,一支返回todolist資料表所有內容的Web API就完成了,那今天的示範就簡單先介紹到這邊。想要聽多一些廢話的可以看影片
新手分享學習成果,若有錯誤,煩請告知修正,感謝🙏
範例下載:下載