使用 Entity Framework 的 Database first 是專案開發的常態。當資料庫有異動,可以透過 edmx 更新。
如果不想了解 *.edmx 檔,以下內容就不需要看了。最簡便更新 Entity Framework 的方式是,直接開啟 .edmx 檔,全選資料表,全部刪除。右鍵選擇「Update Model from Database」,重新建立。
如果想了解 *.edmx 檔,從 Visual Sturdio 方案總管可以看到 *.edmx 檔組成如下:
有兩個「*.tt」檔,那是.NET 提供來產生程式碼或文字檔的檔案,稱為 T4 text template / T4文字範本。以上圖為例,
- Model1.Context.tt
從 edmx 檔的定義產生資料連線的 Model1.Context.cs 檔。 -
Model1.tt
從 edmx 檔的定義產生對應到實體資料庫「資料表」的 *.cs 檔。檔名即是資料表名稱,裡面的 Property 是資料表欄位名稱和定義。
所以,在資料模型的建立,edmx 檔扮演關鍵腳色,應該來認識一下。
從方案總管雙擊 .edmx 檔,會出現視覺化的資料表關聯圖。
改以右鍵點選 edmx ,選擇「開啟方式」> 「XML(文字)編輯器」。可以看到 XML 格式的內容裡,在 edmx:Runtime 區段由 SSDL、CSDL、MSL(C-S Mapping) 三部分組成。
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 檔。達到我們更新資料模型的目的。
您好~請問有可能使用某種工具來更新 edmx 檔案嗎?
(Jenkins Auto Build ,但會卡 edmx 檔案不全…)
讚讚