讓 EntityFramework 綁定自定 Enum 型別

讓 EntityFramework 可以綁定自定 Enum 有兩個好處:

  1. 不用再自行轉換 int 跟 Enum
  2. 透過 scaffolding 可以直接綁定 dropdownlist,這讓我們在開發上節省不少工作。

今天的筆記是針對 EntityFramework Database First 模式(因為 Code First 的類別本來就是自定的),透過 EntityFramework 的設定,可以讓 Class 產出時直接綁定 Enum 型別,存取資料時也能自動完成轉換。

資料欄位定義

  • WeekDay 為 int

    1table

自訂 Enum

public enum WeekDaysEnum
{
    Default,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

未設定前

  1. Class

    • int 型別

      2class

  2. scaffolding

    • 開放式 input

      3form

EntityFramework 設定綁定 Enum

  1. 開啟 .edmx

    4edmx

  2. 開啟 Model Browser

    • 1-1. 在 edmx diagram 隨處按右鍵
    • 1-2. Show in Model Browser

      5modelbrowser

  3. Model Browser 加入自訂 Enum

    6model

    • 3-1. 新增自訂 Enum

      • Enum Types 右鍵
      • Add New Enum Type

        7addnew

    • 3-2. 新增方式有兩種

      • a. 直接輸入

        • 會新增 .cs 在 .edmx 所在 folder 下
        • 依輸入內容建立 enum

          8inputenum

      • b. 綁定既有 enum

        • 指定 enum 名稱
        • 輸入既有 enum 型別名稱(建議加上 namespace)

          9existedenum

    • 3-3. 欄位綁定 Enum 型別

      • 開啟欄位屬性視窗
        • 在欲綁定的欄位按 右鍵–> properties 或 F4
      • Type 選擇剛剛加入的 enum 型別

        10binding

    • 3-4. 記得存檔及編譯

完成結果

  1. Class

    • 自定 enum 型別

      11calss

  2. scaffolding

    • 綁定 dropdownlist

      12dropdownlist

心得

綁定後就可初步避免手誤填錯的問題(如果擔心有心人士搗蛋還是需要自行實作檢查機制),搭配上 scaffolding 自動產生對應的 dropdownlist ,另外還有再也不用手動轉換,這些都讓開發效率可以大大提昇。

參考資訊