模型優先

這段影片和逐步解說提供使用 Entity Framework 進行模型優先開發的簡介。 Model First 可讓您使用 Entity Framework Designer 建立新的模型,然後從模型產生資料庫架構。 模型會儲存在EDMX檔案 (.edmx擴展名)中,而且可以在 Entity Framework Designer 中檢視和編輯。 您在應用程式中互動的類別會自動從 EDMX 檔案產生。

觀賞影片

這段影片和逐步解說提供使用 Entity Framework 進行模型優先開發的簡介。 Model First 可讓您使用 Entity Framework Designer 建立新的模型,然後從模型產生資料庫架構。 模型會儲存在EDMX檔案 (.edmx擴展名)中,而且可以在 Entity Framework Designer 中檢視和編輯。 您在應用程式中互動的類別會自動從 EDMX 檔案產生。

主講人Rowan Miller

影片WMV | MP4 | WMV (ZIP)

必要條件

您必須安裝Visual Studio 2010或Visual Studio 2012,才能完成本逐步解說。

如果您使用 Visual Studio 2010,您也必須 安裝 NuGet

1.建立應用程式

為了簡化工作,我們將建置使用 Model First 執行資料存取的基本控制台應用程式:

  • 開啟 Visual Studio
  • 檔案 -> 新增 -> 專案...
  • 從左側選單選取 [Windows] 和 [控制台應用程式]
  • 輸入 ModelFirstSample 作為名稱
  • 選取確定

2.建立模型

我們將使用包含在Visual Studio中的 Entity Framework Designer 來建立模型。

  • 專案 -> 新增專案...

  • 從左側功能表中選取 [數據 ],然後 ADO.NET 實體數據模型

  • 輸入 BloggingModel 作為名稱,然後按兩下 [ 確定],這會啟動 [實體數據模型精靈]

  • 選取 [空白模型 ],然後按兩下 [ 完成]

    Create Empty Model

Entity Framework 設計工具會以空白模型開啟。 現在我們可以開始將實體、屬性和關聯新增至模型。

  • 以滑鼠右鍵按兩下設計介面,然後選取 [ 屬性]

  • 在 屬性視窗 將實體容器名稱變更為 BloggingContext 這是將為您產生之衍生內容的名稱,內容代表與資料庫的會話,讓我們查詢和儲存數據

  • 以滑鼠右鍵按兩下設計介面,然後選取 [ 新增 -> 實體...

  • 輸入 Blog 作為實體名稱,並將 BlogId 輸入為金鑰名稱,然後按兩下 [ 確定]

    Add Blog Entity

  • 以滑鼠右鍵按兩下設計介面上的新實體,然後選取 [新增 -> 純量屬性],輸入 Name 作為屬性的名稱。

  • 重複此程式以新增 Url 屬性。

  • 以滑鼠右鍵按兩下設計介面上的 Url 屬性,然後選取 [屬性],在 [屬性視窗 將可為 Null 的設定變更True 這可讓我們將部落格儲存至資料庫,而不需將 Url 指派給資料庫

  • 使用您剛才學到的技術,使用PostId索引鍵屬性新增Post實體

  • 將標題和內容純量屬性新增Post 實體

既然我們有數個實體,現在可以在它們之間新增關聯(或關聯性)。

  • 以滑鼠右鍵按兩下設計介面,然後選取 [ 新增 -> 關聯...

  • 將一個關聯點設為部落格,其中一個具有多重性,另一個端點指向具有多重性的 Post,這表示部落格有許多文章,而文章屬於一個部落格

  • 確定已核取 [ 將外鍵屬性新增至 'Post' 實體 ] 方塊,然後按兩下 [ 確定]

    Add Association MF

我們現在有一個簡單的模型,我們可以從 中產生資料庫,並使用 來讀取和寫入數據。

Model Initial

Visual Studio 2010 中的其他步驟

如果您在 Visual Studio 2010 中工作,則需要執行一些額外的步驟,才能升級至最新版本的 Entity Framework。 升級很重要,因為它可讓您存取改良的 API 介面,這更容易使用,以及最新的錯誤修正。

首先,我們需要從 NuGet 取得最新版本的 Entity Framework。

  • 專案 –> 管理 NuGet 套件...如果您沒有 [管理 NuGet 套件...] 選項,您應該安裝 最新版本的 NuGet
  • 選取 [在線] 索引標籤
  • 選取 EntityFramework 套件
  • 按一下 [安裝]

接下來,我們需要交換模型,以產生使用 DbContext API 的程式代碼,而 DbContext API 是在更新版本的 Entity Framework 中引進的。

  • 以滑鼠右鍵按兩下 EF Designer 中模型的空白位置,然後選取[ 新增程式代碼產生專案...

  • 從左側功能表中選取 [在線範本 ],然後搜尋 DbContext

  • 選取適用於 C# 的 EF 5.x DbContext 產生器,輸入 BloggingModel 作為名稱,然後按兩下 [新增]

    DbContext Template

3.產生資料庫

根據我們的模型,Entity Framework 可以計算資料庫架構,以允許我們使用模型來儲存和擷取數據。

隨 Visual Studio 一起安裝的資料庫伺服器會根據您安裝的 Visual Studio 版本而有所不同:

  • 如果您使用 Visual Studio 2010,您將建立 SQL Express 資料庫。
  • 如果您使用 Visual Studio 2012,您將建立 LocalDB 資料庫。

讓我們繼續產生資料庫。

  • 以滑鼠右鍵按兩下設計介面,然後選取 [從模型產生資料庫...

  • 單擊 [新增 連線...],並根據您使用的 Visual Studio 版本指定 LocalDB 或 SQL Express,輸入 ModelFirst.Blogging 作為資料庫名稱。

    LocalDB Connection MF

    Sql Express Connection MF

  • 選取 [ 確定 ],系統會詢問您是否要建立新的資料庫,選取 [ 是]

  • 選取 [下一步 ],Entity Framework 設計工具會計算腳本以建立資料庫架構

  • 顯示腳本之後,按兩下 [完成 ],腳本將會新增至您的項目並開啟

  • 以滑鼠右鍵按下腳本並選取 [執行],系統會提示您指定要連線的資料庫、指定 LocalDB 或 SQL Server Express,視您使用的 Visual Studio 版本而定

4. 讀取和寫入數據

既然我們有模型,現在是時候使用它來存取某些數據了。 我們將用來存取數據的類別會根據EDMX檔案自動為您產生。

此螢幕快照來自 Visual Studio 2012,如果您使用 Visual Studio 2010,BloggingModel.tt 和 BloggingModel.Context.tt 檔案會直接位於您的專案底下,而不是巢狀在 EDMX 檔案底下。

Generated Classes

在 Program.cs 中實作 Main 方法,如下所示。 此程式代碼會建立內容的新實例,然後使用它來插入新的部落格。 然後使用 LINQ 查詢,從依 Title 依字母順序排序的資料庫擷取所有部落格。

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            var blog = new Blog { Name = name };
            db.Blogs.Add(blog);
            db.SaveChanges();

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

您現在可以執行應用程式並進行測試。

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
ADO.NET Blog
Press any key to exit...

5.處理模型變更

現在是時候對模型進行一些變更,當我們進行這些變更時,我們也需要更新資料庫架構。

我們將從將新的 User 實體新增至模型開始。

  • 將新的用戶實體名稱新增為Username作為索引鍵名稱,並將 String 新增為索引鍵的屬性類型

    Add User Entity

  • 以滑鼠右鍵按兩下設計介面上的 Username 屬性,然後選取 [屬性],在 [屬性視窗 將 MaxLength 設定變更50 這會將可儲存在使用者名稱中的數據限制為 50個字元

  • DisplayName 純量屬性新增至 User 實體

我們現在有一個更新的模型,而且我們已經準備好更新資料庫,以容納我們新的用戶實體類型。

  • 以滑鼠右鍵按兩下設計介面,然後選取 [從模型產生資料庫...],Entity Framework 會計算腳本,以根據更新的模型重新建立架構。
  • 按兩下 [ 完成]
  • 您可能會收到有關覆寫現有 DDL 腳本和模型對應和儲存部分的警告,針對這兩個警告按兩下 [是 ]
  • 已為您開啟更新的 SQL 腳本以建立資料庫
    產生的腳本將會卸除所有現有的數據表,然後從頭開始重新建立架構。 這適用於本機開發,但無法將變更推送至已部署的資料庫。 如果您需要將變更發佈至已部署的資料庫,您必須編輯文本或使用架構比較工具來計算移轉腳本。
  • 以滑鼠右鍵按下腳本並選取 [執行],系統會提示您指定要連線的資料庫、指定 LocalDB 或 SQL Server Express,視您使用的 Visual Studio 版本而定

摘要

在本逐步解說中,我們已探討Model First開發,這可讓我們在EF Designer中建立模型,然後從該模型產生資料庫。 然後,我們使用模型從資料庫讀取和寫入某些數據。 最後,我們更新了模型,然後重新建立資料庫架構以符合模型。