只有累積,沒有奇蹟

2019年4月3日 星期三

[.NETCore] Entity Framework Core 初體驗

前言
前面兩篇文 安裝 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; }
    }
}

補充
指令細節由於之前有寫文詳細介紹過,因此這裡就不在多加介紹,也可以透過工具產生可以參考下列連結
透過以上步驟,就完成了上面 EF Core 建立 DBContext 及指定 Table Member 的內容。 

建立連線
在 .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 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com