[ASP.NET MVC 5] Entity Framework Database first 手動更新 edmx 檔

使用 Entity Framework 的 Database first 是專案開發的常態。當資料庫有異動,可以透過 edmx 更新。

Image 5

如果不想了解 *.edmx 檔,以下內容就不需要看了。最簡便更新 Entity Framework 的方式是,直接開啟 .edmx 檔,全選資料表,全部刪除。右鍵選擇「Update Model from Database」,重新建立。

如果想了解 *.edmx 檔,從 Visual Sturdio 方案總管可以看到 *.edmx 檔組成如下:

Image 1

有兩個「*.tt」檔,那是.NET 提供來產生程式碼或文字檔的檔案,稱為 T4 text template / T4文字範本。以上圖為例,

  • Model1.Context.tt
    從 edmx 檔的定義產生資料連線的 Model1.Context.cs 檔。

  • Model1.tt
    從 edmx 檔的定義產生對應到實體資料庫「資料表」的 *.cs 檔。檔名即是資料表名稱,裡面的 Property 是資料表欄位名稱和定義。

所以,在資料模型的建立,edmx 檔扮演關鍵腳色,應該來認識一下。

從方案總管雙擊 .edmx 檔,會出現視覺化的資料表關聯圖。

Image 2

改以右鍵點選 edmx ,選擇「開啟方式」> 「XML(文字)編輯器」。可以看到 XML 格式的內容裡,在 edmx:Runtime 區段由 SSDL、CSDL、MSL(C-S Mapping) 三部分組成。

Image 3

edmx 檔本身是 XML 檔,由以下三部份組成:

  • SSDL
    稱為 Storage model,定義實體資料庫,如資料表或預存程序。
  • CSDL
    稱為 Conceptual model,定義模型類別,類別稱為 Entity。
  • MSL (C-S Mapping)
    對應實體資料庫資料表與模型類別。

MSDN 有上述三個部份的文件,見以下參考。這裡我們只看 edmx 檔用到的定義。

SSDL / CSDL

  • EntityType
    定義資料表和欄位。
  • Association
    定義如 FK 等關聯性。
  • EntityContainer
    定義 EntitySet,AssociationSet。

MSL(C-S Mapping)

  • EntitySetMapping
    定義 SSDL 和 CSDL 的對應

知道 XML 結構之後,我們可以參考 edmx 寫法,手動新增新的資料表到 edmx 。儲存後,重新執行 Model1.Context.tt, Model1.tt 兩個檔,重新產生 *.cs 檔。

執行方式:右鍵點選 .tt ,選擇「執行自訂工具」。Visual Studio 會根據修改後的 edmx 檔,重新產生相應的 .cs 檔。達到我們更新資料模型的目的。

Image 4

參考

1 關於 “[ASP.NET MVC 5] Entity Framework Database first 手動更新 edmx 檔” 的評論

  1. 張育誌

    您好~請問有可能使用某種工具來更新 edmx 檔案嗎?
    (Jenkins Auto Build ,但會卡 edmx 檔案不全…)

    回覆

發表留言