.NET Magazine國際中文電子雜誌
作 者:許薰尹
審 稿:張智凱
文章編號: N200421802
出刊日期: 2020/4/15
本篇文章延續《Entity Framework Core Power Tools - 1》一文的內容,介紹「Entity Framework Core Power Tools」套件,除了提供視覺化的介面來進行逆向工程(Reverse engineering)之外,還提供了哪些好用的功能。
Migration Tools
「EF Core Power Tools」也提供圖型介面來進行Code First 移轉 -「Migration Tools」。在本文撰寫時,此「Migration Tools」工具尚在預覽版,因此時不時會跳出錯誤訊息,不過只要多試幾次相同的操作,一樣可以完成這些操作動作。
我們來看一下做法,先建立一個新主控台應用程式。從Visual Studio 2019開發工具「檔案」-「新增」-「專案」項目,在「建立新專案」對話盒中,第一個下拉式清單方塊選取「C#」程式語言;從第二個下拉式清單方塊選取「所有平台」;從第三個下拉式清單方塊選取「主控台」,然後選取下方的「主控台應用程式(.NET Core)」範本。請參考下圖所示:

圖 1:建立一個新主控台應用程式。
在「設定新的專案」對話盒中,設定專案名稱與儲存位置,然後按下「建立」按鈕,請參考下圖所示:

圖 2:「設定新的專案」對話盒。
從「方案總管(Solution Explorer)」視窗 – 專案名稱上方,按滑鼠右鍵,從快捷選單選擇「管理NuGet套件」項目,從對話盒上方文字方塊中,輸入查詢關鍵字「Microsoft.EntityFrameworkCore.SqlServer」,找到「Microsoft.EntityFrameworkCore.SqlServer」套件3.1.x版後,點選「安裝」按鈕進行安裝,請參考下圖所示:

圖 3:安裝NuGet套件。
從「方案總管(Solution Explorer)」視窗 –專案名稱上方,按滑鼠右鍵,從快捷選單選擇「加入(Add)」- 「類別(Class)」項目,從「新增項目(Add New Item)」對話盒中,選取「Visual C#項目」-「類別(Class)」項目,然後在下方將「名稱(Name)」設定為「Regions」最後按下「新增(Add)」按鈕,請參考下圖所示:

圖 4:新增類別。
加入「Region」類別程式碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
namespace EFMigrationDemo {
public class Region {
[Key]
[Column( "RegionID" )]
public int RegionId { get; set; }
[Required]
[StringLength( 50 )]
public string RegionDescription { get; set; }
}
}
重複上個步驟,加入一個新類別,名為「MyDbContext」,請參考下圖所示:

圖 5:加入「MyDbContext」類別。
在「MyDbContext」類別加入以下程式碼,其中設定了連接到SQL Server Express資料庫伺服器,MyDbContext資料庫的連接字串「Data Source=.\\sqlexpress;Initial Catalog=MyDbContext;Integrated Security=True」:
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Text;
namespace EFMigrationDemo {
public class MyDbContext : DbContext {
public MyDbContext() {
}
public MyDbContext( DbContextOptions<MyDbContext> options )
: base( options ) {
}
public virtual DbSet<Region> Regions { get; set; }
protected override void OnConfiguring( DbContextOptionsBuilder optionsBuilder ) {
if ( !optionsBuilder.IsConfigured ) {
optionsBuilder.UseSqlServer( "Data Source=.\\sqlexpress;Initial Catalog=MyDbContext;Integrated Security=True" );
}
}
protected override void OnModelCreating( ModelBuilder modelBuilder ) {
modelBuilder.Entity<Region>( entity => {
entity.HasKey( e => e.RegionId )
.IsClustered( false );
entity.Property( e => e.RegionId ).ValueGeneratedNever();
entity.Property( e => e.RegionDescription ).IsFixedLength();
} );
}
}
}
選擇Visual Studio 2019開發工具「方案總管(Solution Explorer)」中的專案名稱,按一下滑鼠右鍵,從快捷選單中,選取「EF Core Power Tools」-「Migrations Tools (preview)」選項,請參考下圖所示:

圖 6:「Migrations Tools (preview)」選項。
在「Manage Migrations in Project 專案名稱」對話盒的文字方塊中,輸入「Migration Name」為「initial」(可以自訂),然後按下「Add Migration」按鈕,請參考下圖所示:

圖 7:「Manage Migrations in Project 專案名稱」對話盒。
在「Manage Migrations in Project 專案名稱」對話盒按一下「Update Databae」按鈕,請參考下圖所示:

圖 8:「Update Databae」按鈕。
這樣就大功告成啦,我們來檢視一下這個步驟產生的資料庫結構描述資訊。開啟Visual Studio 2019開發工具「伺服器總管(Server Explorer)」視窗,在「資料連接(Data Connections)」項目上按滑鼠右鍵,從快捷選單之中選取「加入連接(Add Connection)」項目,請參考下圖所示:

圖 9:「加入連接(Add Connection)」。
連接到微軟SQL Server Express 2019,在「加入連接(Add Connection)」視窗中,設以下屬性,請參考下圖所示:
· 資料來源 (Data Source) :Microsoft SQL Server (SqlClient)。
· 伺服器名稱(Server name)欄位:輸入「.\SQLExpress」。
· 驗證(Authentication):選取「Windows驗證(Windows Authentication)」。
· 選取或輸入資料庫名稱(Select or enter a database name)欄位:選擇「MyDbContext」資料庫。

圖 10:連接到資料庫。
檢視新建立的資料表與欄位資訊,請參考下圖所示:

圖 11:新建立的資料表與欄位資訊。
試著新增一筆資料到資料表。在「Program」類別「Main」方法加入以下程式碼:
using System;
namespace EFMigrationDemo {
class Program {
static void Main( string[] args ) {
using ( MyDbContext context = new MyDbContext() ) {
context.Add( new Region() { RegionId = 1 , RegionDescription = "Eastern" } );
context.SaveChanges();
foreach ( var item in context.Regions ) {
Console.WriteLine( $"Region Id : {item.RegionId} , Region Description : {item.RegionDescription}" );
}
}
}
}
}
這個範例程式的執行結果參考如下:

圖 12:新增並查詢資料。