2017-02-05

讓 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 ,另外還有再也不用手動轉換,這些都讓開發效率可以大大提昇。

沒有留言:

張貼留言