新增數據模型,新增「實體」以後,新增「枚舉類型」,建立Enum值,將「實體」中的列和Enum關聯,選中「實體」中的列屬性改變類型爲Enum名稱,生成數據庫……數據庫
以下轉自:http://item.congci.com/item/entity-framework-meiju-leixing-enum編程
第一步:先建立一個實體對象,在VS 2012裏面實體對象還能夠修改實體顏色數組
第二步:對象已經有了,接着建立一個Type,Type爲Enum,內部與外部(Internal and External),在空白處右鍵(學計算機編程時,老師就給咱們說,遇到不會就先右鍵,以後再Google)瀏覽器
打開模型瀏覽器,一樣能夠添加Enum安全
第三步:建立Enum值post
第四步:讓Type引用Enum,選中Type ,查看屬性spa
第五步:生成數據庫並添加數據3d
第六步:運行看一下結果,先猜一下輸出的類型 是 ?code
很明顯,輸出的不是1,而是External,這正是咱們在綁定時要的值,想不想再看一下數據庫裏面存儲的是什麼值呢?對象
第七步:查看數據庫
Type的值是 1 ,不是External,這樣是否是提升了咱們的開發效率。
在代碼世界中,有一種常見的「變」 —— 類型轉變。這篇文章分享的就是如何經過類型轉變,解決Entity Framework(5.0以前的版本)中枚舉類型(實體)與 tinyint(數據庫字段類型)的映射問題。
對於須要進行持久化的枚舉類型,咱們一般在數據庫表中創建一個對應的tinyint類型的字段。
若是咱們使用Entity Framework做爲ORM,將面臨兩個問題:
1. EF不支持枚舉類型的直接映射(5.0以前的版本)
2. 對於tinyint數據庫類型,無論對應的實體屬性定義的是什麼類型,EF始終映射爲byte類型。
相應的解決方法也不難:
1. 給實體增長一個「中間人」屬性,與數據庫中對應的字段進行映射,而後再轉換爲枚舉類型。
2. 將這個「中間人」屬性定義爲byte類型。
因而就有了下面的代碼:
public class BlogCategory { public CategoryType CategoryType { get; set; }
public byte CategoryTypeByte { get; set; } }
BlogCategory.CategoryType是枚舉類型的屬性,是代碼中實際訪問的屬性;BlogCategory.CategoryTypeByte是增長的「中間人」屬性,專用於映射數據庫中tinyint類型的字段。
隨之,難題出現了,如何在枚舉類型與bype類型之間進行轉換呢?在讀取BlogCategory.CategoryType屬性時,須要將byte轉換爲枚舉;在寫入BlogCategory.CategoryType屬性時,須要將枚舉轉換爲byte。
枚舉類型能夠方便地轉換爲int類型,但int類型是32位的(4個byte)。也就是說,這二者尺碼不同,大轉小,要減肥;小轉大,要增胖。
對於類型轉換安全問題,咱們無需擔憂,由於數據庫中是tinyint類型,數據的長度不會超過1個byte。
那如何轉換呢?
.NET提供了一個強大的轉換器 —— System.BitConverter,讓咱們來看看如何經過它實現72變。
1. 大轉小,減肥,枚舉轉byte。
public BlogCategoryType CategoryType { set { CategoryTypeByte = BitConverter.GetBytes((int)value)[0]; } }
將枚舉轉換爲int,再將int轉換爲byte數組,而後取第一個元素。
2. 小轉大,增胖,byte轉枚舉。
public BlogCategoryType CategoryType { get { return (BlogCategoryType)BitConverter.ToInt32( new byte[] { CategoryTypeByte, 0x0, 0x0, 0x0 }, 0); } }
增長三個值爲0的byte,與CategoryTypeByte組合爲長度爲4的byte數組(由於int類型的須要),而後將這個byte數組轉換爲int類型。
注:該解決方法已經過臨牀驗證,確實有療效,請放心使用!