前面兩篇文 安裝 Entity Framework Core、使用 EF Core Power Tool 分享了在 .NET Core 如何使用 EF Core 產生已存在 DB Table 模型物件,仔細回想一下分享內容過於片段可能無法讓人抓到重點,因此決定再寫一篇分享 EF Core DB First 在 .NET Core 中操作與設定,此篇文章包含新增下列項目
- 範例 .NET Core 專案
- 建立 DB Table 物件
- EF Core DB 連線設定
- 新增 Controller : CRUD 代碼
- 測試 API
首先先建立一個 .Net Core Web API 專案測試作為範例,開啟 Visual Studio 2017 新增專案,選擇 .NET Core 與 ASP.NET Core Application,輸入專案名稱按下確定
接著類型選擇 API,這邊用不到 Docker support 可以取消勾選
建立 DB Table 物件
由於是範例程式,因此這步驟主要是再進行測試資料庫 Table 的新增動作方便後續 Demo,在自己 local 北風資料庫新增一個 Member Table,其中包含 ID、Name、Password 三個欄位 (由於是簡單的測試範例 Sample 所以密碼先不加密,壞榜樣 ! ),以下為產生 Member Table 的 script 內容
USE [Northwind] GO /****** Object: Table [dbo].[Member] Script Date: 2019/4/4 上午 11:56:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Member] ( [Id] INT NOT NULL, [Name] NVARCHAR (50) NOT NULL, [password] NVARCHAR (10) NOT NULL );執行完就會在北風資料庫產生 Member Table 物件,透過 Visual Studio 2017 內建的 SQL Server Object Explore 檢視如下
建立 DBContext
這步驟是要在 .NET Core API 專案建立 DBContext 與 Table 物件模型,在 Package Manager Console 輸入以下指令建立資料庫模型
Scaffold-DbContext "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -table member輸出成功的話,會在專案自動建立 Models 資料夾
資料夾底下有 NorthwindContext 及 member 類別,開啟 Member 內容與 DB 內的相同
namespace EFCoreApplication.Models { public partial class Member { public int Id { get; set; } public string Name { get; set; } public string Password { get; set; } } }
補充
指令細節由於之前有寫文詳細介紹過,因此這裡就不在多加介紹,也可以透過工具產生可以參考下列連結
- 使用指令 : [.NETCore] 安裝 Entity Framework Core
- 使用工具 : [.NETCore] 安裝 Entity Framework Core - 使用 EF Core Power Tool
建立連線
在 .NET Core 專案 DBContext 連線設定是在 Start.cs 的 ConfigureServices 位置,註冊方式如下
public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); var connection = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; services.AddDbContext<NorthwindContext>(options => options.UseSqlServer(connection)); }
說明如下
- 定義連線字串 connection (也可以將連線字串設定在 appsettings.json 檔案中)
- 使用 service.AddContext 註冊 DBContext 物件,範例中就是稍早新增的 NorthwindContext 物件,option 則是指定需要連到的資料庫類型,範例是使用因此就是 sqlserver 並設定其連線字串
新增 Controller
新增 Member Controller,在 Controllers 資料夾按右鍵 > Add > 選擇 controller
接著可以選擇要新增的 Controller 類型,選擇最後一項 using Entity Framework controller
新增 EF Controller 需要知道 DBContext 與類別,因此此步驟是要指定 Data context 與 Model 類別物件,這裡可以透過下拉選單選擇剛剛新增的 NorthwindContext 與 Member model 物件,以及輸入Controller 名字
按下 add 後會產生 controller,產生代碼會在建構子注入指定 context 物件,以及針對 Member 新增刪改的async 非同步方法
測試
在 MSDN 介紹是透過 Postman 來進行測試,但我個人推薦是使用 swagger 測試更為方便,在操作介面上更為簡單不用一直在不同的 tab 進行切換,swagger 在 .NET Core 的安裝不是這篇的重點,想瞭解可以參考 MSDN 說明 : 傳送門,安裝完畢後打開 Swagger 可以看到下列畫面
可以清楚的看到目前 Member 所產生的 API 清單以及對應的 Http Method 方法,接下來為了測試方便我在 Member Table 中新增四筆資料,方便進行測試及驗證的動作
接著在使用 swagger 執行 Member 的 Get 方法取得 Member 所有資料回傳
取得所有 Member 方法筆數相同,驗證無誤,接下來繼續驗證其他方法是否正常,直接透過 gif 來確認驗證其他方法結果
GET - 透過 id 查詢
輸入 ID 取得指定 Member 內容
POST - 新增
PUT - 修改
修改特定資料,在透過查詢方法確認是否有修改成功
DELETE - 刪除
刪除 member id 為 5 的資料,在透過查詢確認是否刪除成功
方法均沒問題,宣告 EF Core 初體驗成功 !!!!
參考
Getting Started with EF Core on ASP.NET Core with an Existing Database
0 意見:
張貼留言