只有累積,沒有奇蹟

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 內容
  1. USE [Northwind]
  2. GO
  3.  
  4. /****** Object: Table [dbo].[Member] Script Date: 2019/4/4 上午 11:56:43 ******/
  5. SET ANSI_NULLS ON
  6. GO
  7.  
  8. SET QUOTED_IDENTIFIER ON
  9. GO
  10.  
  11. CREATE TABLE [dbo].[Member] (
  12. [Id] INT NOT NULL,
  13. [Name] NVARCHAR (50) NOT NULL,
  14. [password] NVARCHAR (10) NOT NULL
  15. );
執行完就會在北風資料庫產生 Member Table 物件,透過 Visual Studio 2017 內建的 SQL Server Object Explore 檢視如下

建立 DBContext
這步驟是要在 .NET Core API 專案建立 DBContext 與 Table 物件模型,在 Package Manager Console 輸入以下指令建立資料庫模型
  1. 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 內的相同
  1. namespace EFCoreApplication.Models
  2. {
  3. public partial class Member
  4. {
  5. public int Id { get; set; }
  6. public string Name { get; set; }
  7. public string Password { get; set; }
  8. }
  9. }

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

建立連線
在 .NET Core 專案 DBContext 連線設定是在 Start.cs 的  ConfigureServices  位置,註冊方式如下
  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  4.  
  5. var connection =
  6. @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
  7. services.AddDbContext<NorthwindContext>(options => options.UseSqlServer(connection));
  8. }
說明如下
  • 定義連線字串 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

Related Posts:

  • [.NETCore] ASP.NET Core - Logging 日誌初體驗 (一)前言 在前一篇的文章裡介紹 ASP.Net Core 中如使用 NLog 將日誌紀錄於指定的位置檔案中,在ASP.Net Core 內建 logging framework ,專門負責記錄 log 與提供 API 與第三方紀錄套件像是 NLog、Log4Net 整合搭配使用,這篇文章是閱讀 MSDN 官網的 ASP.NET Core logging 後摘錄重點筆記,若有問題歡迎提出一起討論或是給予指導 使用 I… Read More
  • [.NETCore] ASP.Net Core 使用 Big5 中文編碼 問題 在 .NET Framework 時要取得中文編碼可以使用  Encoding.GetEncoding("BIG5"),今天在練習專案時遇到類似的情境很直覺的在將 Code 套用在 .NET Core 上,沒想到竟然發生錯誤,這邊簡單紀錄遇到這問題該怎麼解決以及根本原因,有任何問題歡迎留言一起討論 解決方式  "ArgumentException: 'Big5' is not a support… Read More
  • [.NETCore] ASP.NET Core - Logging 日誌初體驗 (二)前言 在上一篇文章介紹了在 ASP.Net Core 如何使用內建的 logging,以及 ILogger 與 ILoggerFactory 還有篩選記錄的方法,這篇再繼續介紹在 logging 中一些基本觀念與應用,如果有寫不清楚的地方可以搭配 MSDN 官網的 ASP.NET Core logging 一起服用,若有問題歡迎提出一起討論或是給予指導 LogLevel 紀錄 log 時候都會指定紀錄… Read More
  • [CheatSheets] ASP.NET Memory Management 前言  在 ASP.NET 中記憶體管理一直是個很重要的議題,Pro.NET Memory Management 一書的作者為了讓開發者更容易了解其中這神祕的世界,製作了兩張關於 .NET Core 與 .NET GC 記憶體相關摘要的海報,看完覺得實用特記錄在部落格中,做為日後小抄使用 :) 海報內容僅是對於 static 與 dynamic 的兩個觀點作介紹,當然其中還是有很多細節與實作方式需要了解,如果更有興趣可以… Read More
  • [Free] ASP.NET Core eBook - ASP.NET Core 的兩三事前言 去年正式踏入 ASP.NET Core 的世界,在學習 .NET Core 的過程中自己也持續地將所學到相關知識記錄在這裡,除了希望可以加深對於 ASP.NET Core 的了解之外也希望能幫助自己健忘的金魚腦,另外也有個想法是累積到一定文章數量之後,可以將所學到的文章有系統與結構性整理出來成電子書,來幫助對 .NET Core 有興趣或是正在學習的的開發者朋友,經過一個月的努力之後於是誕生了 &nbs… Read More

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com