快快樂樂學 Code First 開發,以現有資料庫為例

本文將介紹如何利用 Entity Framework Power Tools 將現有資料庫轉為 Code First 相關類別。

情境描述

最近跟小章哥討論到 Entity Framework 時,提到有可以利用 Entity Framework Power Tools 的反向工程功能來從現有資料庫產生 Code First 的 POCO 類別、DbContext 以及  Code First 對映,依照小章哥的指示,需要有一篇 Step by Step 的文章做參考,筆者自告奮用的寫下這篇快快樂樂系列文,詳見下一節。

實作步驟

步驟一、安裝 Entity Framework Power Tools(Beta 3)

開啟 Visual Studio 2012 點選【TOOLS > Extensions and Updates】。

image

點選【Extensions and Updates】視窗左側的【Online】節點,接著到視窗右上角輸入【entity framework power】就會在畫面中央的搜尋結果中看到【Entity Framework Power Tools Beta 3】,點選右側的【Download】進行下載並安裝。

image

安裝完畢之後 Visual Studio 會提示您要重新啟動 Visual Studio 才能讓 Entity Framework Power Tools 生效,請按【Restart Now】。

image

步驟二、建立 Console 專案

待步驟一完成後重新啟動 Visual Studio 後,於 Start Page 點選【New Project】,接著在【New Project】視窗左側點選【Installed > Templates > Other Languages > Visual C# > Windows】來選擇 Windows 應用程式的樣板,您會在畫面中間找到【Console Application】,點選該項目之後輸入您的新專案名稱然後按【OK】。

image

步驟三、加入 Entity Framework 參考

專案建立完畢後,於 Visual Studio 功能表中點選【TOOLS > Library Package Manager > Manage NuGet Packages for Solution】。

image

在【Manage NuGet Packages】視窗右上角的搜尋文字方塊中輸入【EntityFramework】,找到 EntityFramework 後點選右側的【Install】。

image

接著 Visual Studio 會詢問您要將 EntityFramework 安裝在哪一個專案當中,由於本範例只有一個專案,因此直接點選【OK】即可。

image

此時 Visual Studio 問您是否接受授權條款,當然是直接點選【I Accept】。

image

接著就會開始下載 EntityFramework 組件及加入相關的參考,安裝完畢之後點選【Close】。

image

若上述步驟都沒問題,您將在【Solution Explorer】視窗中的 References 節點看到 EntityFramework。

image

步驟四、Reverse Engineer Code First

接下來是本文的重點,請於專案上按滑鼠右鍵,選擇【Entity Framework > Reverse Engineer Code First】。

image

在【Connection Properties】視窗中輸入您的資料庫連線資訊,告訴 Entity Framework Power Tools 您要從哪一個現有的資料庫,透過反向工程功能來產生 Code First 相關類別,輸入完畢之後按【OK】。

image

稍等一下之後您就會在【Solution Explorer】中看到 Entity Framework Power Tools 幫您產生的 POCO 類別、DbContext 以及  Code First 對映。

image

您可以看到 DBContext 所使用的連接字串名稱為 NorthwindContext,它會對應到組態檔中的【connectionStrings】區段的連線字串,您可以依照需求來進行連線字串的調整。

image

步驟五、撰寫程式碼測試資料庫查詢

最後利用下列的程式碼,測試是否可以經由 Entity Framework Power Tools 產生的 Code First 類別存取資料庫。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CodeFirstDemo.Models;

namespace CodeFirstDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (NorthwindContext context = new NorthwindContext())
            {
                #region 查詢測試
                Console.WriteLine("-----查詢測試開始-----");
                var query = from p in context.Regions
                            select p;
                foreach (var item in query)
                {
                    Console.WriteLine(string.Format("{0},{1}", item.RegionID, item.RegionDescription));
                }
                Console.WriteLine("-----查詢測試結束-----"); 
                #endregion
            }
            Console.Read();
        }
    }
}

執行結果如下:

image

結論

本文僅針對 Entity Framework Power Tools 的反向工程功能進行簡介,經過實驗發現利用該工具可以快速幫您產生相對應的 Code First 類別,但是如果您在工具幫您產生的類別當中加入自己的程式碼之後,請勿再使用步驟四的 Reverse Engineer Code First 功能,否則您所輸入的程式碼會被工具幫您產生的內容給取代,若真的要再次進行反向工程請記得先將程式碼做備份或是做版本控管。

參考資料

- EF Power Tools

- Entity Framework Power Tools Beta 3

- Code-First Development with Entity Framework 4

- Code First to an Existing Database

- 使用 Entity Framework Power Tools Beta 2 將現有資料庫反向工程為 Code First 類別時,可能發生 0x80070057 的錯誤

- 使用 Entity Framework Power Tools Beta 2 的小技巧

- EF Power Tools Beta 3 Available