新增數據模型,新增“實體”之后,新增“枚舉類型”,創建Enum值,將“實體”中的列和Enum關聯,選中“實體”中的列屬性改變類型為Enum名稱,生成數據庫……
如下轉自:http://item.congci.com/item/entity-framework-meiju-leixing-enum
第一步:先創建一個實體對象,在VS 2012里面實體對象還可以修改實體顏色

第二步:對象已經有了,接着創建一個Type,Type為Enum,內部與外部(Internal and External),在空白處右鍵(學計算機編程時,老師就給我們說,遇到不會就先右鍵,之后再Google)

打開模型瀏覽器,同樣可以添加Enum

第三步:創建Enum值


第四步:讓Type引用Enum,選中Type ,查看屬性

第五步:生成數據庫並添加數據

第六步:運行看一下結果,先猜一下輸出的類型 是 ?

很明顯,輸出的不是1,而是External,這正是我們在綁定時要的值,想不想再看一下數據庫里面存儲的是什么值呢?
第七步:查看數據庫

Type的值是 1 ,不是External,這樣是不是提高了我們的開發效率。
解決Entity Framework中枚舉類型與tinyint的映射問題
在代碼世界中,有一種常見的“變” —— 類型轉變。這篇文章分享的就是如何通過類型轉變,解決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類型。
注:該解決方法已通過臨床驗證,確實有療效,請放心使用!

