只有累積,沒有奇蹟

顯示具有 Entity Framework Core 標籤的文章。 顯示所有文章
顯示具有 Entity Framework Core 標籤的文章。 顯示所有文章

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

2019年4月2日 星期二

[.NETCore] 安裝 Entity Framework Core - 使用 EF Core Power Tool

前言
在上一篇介紹了 安裝 Entity Framework Core 文章中說明如何透過指令方式產生 DBContext 物件,今天在搜尋 EF Core 相關資料時發現 mkrt 大推薦的工具 - Visual Studio 2017 擴充功能 - EF Core Power Tools,原來除了指令之外也可以透過擴充工具達到同樣結果,打鐵要趁熱,這篇文章就來介紹如何使用 EF Core Power Tools,若有問題歡迎提出一起討論或是給予指導。

安裝擴充工具
安裝位置 : 傳送門  
EF Core Power Tool 是支援 EF Core 產生 DBContext 自動化、Migration、檢視 DBContext Model 的工具、支援 Visual Studio 2017 以及最新的 Visual Studio 2019。這段就簡單介紹如何進行安裝的過程,首先到擴充管理員搜尋 EF Core Power Tool,選擇下載
下載完畢後會提示當關閉 Visual Studio 之後才會進行安裝作業,因此關閉 Visual Studio 2017 以及 VS Code IDE,接著會進行 EF Core power Tools 的安裝
安裝完畢後,再開啟擴充管理員左邊點選 online,右邊區塊有看到就代表安裝完成

建立 DBContext
在目前建立 DBContext 是透過指令進行,EF Core Power Tool 提供 GUI 介面新增 DBContext 物件,首先先在專案按下右鍵,滑鼠移至 EF Core Power Tool 選項,選擇 Reverse Engineer 
按下之後會跳出視窗,請你選擇 Database 連線項目,如果下拉選單沒有想要的可以按下 Add 新增
下一步是選擇想要產生的 Table 物件名稱,如果資料庫多到很可怕可以點選右上角搜尋功能 filter 過濾
接著下一步是指定 Context 名稱與設定 namespace,選擇產生的項目是 DBContext 或是只要 Model
確認後按下OK,即會自動產生相對應物件,也可以看到專案底下多了剛剛選擇的 Table Entity 以及 NorthwindContext 物件
透過 EF Core Power Tool 產生 DBContext 物件成功 ! 

後記
回到熟悉的 GUI 操作流程與介面產生 DBContext 物件,雖然目前僅支援 Table 不支援產生 SP 內容,但就操作上還是跟之前要手動 Key 指令時方便不少,也可減少人工打指令打錯的風險,但其實 EF Core Power Tools 還有不少功能像是產生 Model 之間的關聯表,如果想了解更多功能可以到官網的 Github 或是 Channel 9 的影片說明,會有更大的幫助 ! 若有錯誤與更快的做法歡迎討論與留言,謝謝

參考
EFCorePowerTools

2019年4月1日 星期一

[.NETCore] 安裝 Entity Framework Core

前言
最近在開發專案時要在 .NET Core 下使用 ORM 進行資料庫操作,第一直覺當然是用微軟強大的 Entity Framework 來解決,但實際操作後發現在 ASP.NET Core 下建立 Entity Framework Core 目前沒有過去 .NET Framework 下 Entity Framework 6.x 操作上來的方便,這篇文章就來介紹安裝 Entity Framework Core (DB First) 的方式,若有問題歡迎提出一起討論或是給予指導。

安裝套件
首先建立一個 .Net Core Console 專案來測試,要建立前需要先至 Nuget 下載對應資料庫的套件,在 EF Core 2.0 截至目前為止提供 21 種 Database Provider,詳細支援的清單以及未來要支援的 Database 有興趣可以看一下官網說明 : 傳送門,今天範例所使用的資料庫是 MS SQL,因此一開始請先至 Nuget 下載套件,分別是
  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.Tools
目前最新版是 2.2 版,按下右邊 install 進行下載,接下來會跳出視窗提案要安裝的套件項目,這畫面不想看可以關掉但是我自己留著是會留意一下安裝了哪一些套件內容
或者是直接在 Package Manager Console 輸入指令安裝,速度會比較快
  • Install-Package Microsoft.EntityFrameworkCore
  • Install-Package Microsoft.EntityFrameworkCore.SqlServer
  • Install-Package Microsoft.EntityFrameworkCore.Tools
安裝完畢之後可以到專案   Dependencies  確認是否有安裝的套件名稱,有的話即代表安裝成功。

建立 DBContext
在過去 .NET Framework 的 Entity Framework 在建立模型上提供 GUI 介面操作,可以在 Visual Studio IDE 中點選加入 實體資料模型方式,但在 .NET Core 需要自行輸入指令加入資料模型,在建立資料模型前需要知道 MS SQL 的連線字串,取得連線字串步驟如下
Step 1 : 開啟 Visual Studio IDE 的 SQL Server Object Explore
Step 2 : 要建立的 DB 按下右鍵 > 屬性
Step 3 : 複製 connectionString 區段
接著,在 Package Manager Console 輸入以下指令建立資料庫模型
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=yourDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
指令說明
  •  "Server=(localdb)..."  : 指定連線字串
  •  Microsoft.EntityFrameworkCore.SqlServer  : 指定 Data Provider
  •  -OutputDir  : 指定產生資料夾名稱
預設會將資料庫中所有的 Table 物件輸出指定資料夾,如果不想輸出 DB 所有的 Table 物件也提供指定 Table 方式,在最後加上參數  -Tables  加入指定 TableName 並以 "," 串接起來要指定的 Table,例如 : -Tables Categories,Employees,就會輸出這三個 Table 物件不會全部輸出;以最常使用的北風資料庫為例
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\DB
輸出成功的話,會自動建立 DBContext 以及產生相關 Table 物件
透過以上步驟,就完成了上面 EF Core 建立 DBContext 的簡單過程說明,如果想了解更多細節可以參考 MSDN 官方說明 : 傳送門 

後記
這篇簡單說到在 ASP.NET Core 如何建立 EF Core 的基本流程,從安裝 Microsoft.EntityFrameworkCore 相關套件到建立 DBContext 物件,接著下一步是使用 DBContext 就與過去 .NET Framework 並無太大差異,如果日後有時間會在分享後續實作,若有錯誤與更快的做法歡迎討論與留言,謝謝

參考
Getting Started with EF Core on ASP.NET Core with an Existing Database


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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com