2011-06-14 52 views
33

在EF代碼優先中使用枚舉是否有標準方法?似乎有一些例子使用enum的包裝類。枚舉與EF代碼優先 - 標準方法播種DB然後使用?

但是,我想能夠定義枚舉並使用數據庫初始值設定項將枚舉值也播種到數據庫中。如果我必須從枚舉中手動生成數據庫表,那麼定義枚舉和創建包裝器似乎沒有多大意義。

+6

如果你想枚舉與鍵值對分開的表,那麼它不是枚舉了,它成爲標準關係。 – 2011-06-14 14:24:18

回答

18

現在支持:http://blogs.msdn.com/b/adonet/archive/2011/06/30/announcing-the-microsoft-entity-framework-june-2011-ctp.aspx

微軟實體框架2011年6月CTP引入了兩個新的運行和設計時間功能。下面是一些新的運行時功能:

  • 枚舉數據類型現在是在實體框架可用。您可以使用Visual Studio中的Entity Designer對具有Enum屬性的實體進行建模,也可以使用Code First工作流定義具有Enum對象作爲屬性的實體。您可以使用枚舉屬性,就像任何其他標量屬性,如在LINQ查詢和更新...

有用於Visual Studio中的Entity Framework設計了一些新的特點:

  • 的實體設計現在支持枚舉,空間數據類型和表值函數從設計師表面的創作...
+5

大家知道,EF 4.2不支持它(女巫可在NuGet中使用)自2011年6月以來,CTP使用.net 4.5功能構建,因此您必須按照以下鏈接中的說明更改應用程序的範圍。 – VinnyG 2011-10-20 13:15:29

70

不幸的是,在EF 4.1上本機不支持enums。以下是一篇頗有名氣的文章:如何處理它們:Faking enums on EF 4。但是,它確實需要一個包裝。

但是,有一種簡單的方法可以在EF 4中映射枚舉:只需在您的類上創建一個int屬性來表示枚舉的int值。這是EF應該映射的屬性,然後有一個「迷你包裝器」屬性允許您使用枚舉。

public class Appointment 
{ 
    public int ID { get; set; } 
    public string Description { get; set; } 

    // This property will be mapped 
    public int DayOfWeekValue { get; set; } 

    public DayOfWeek Day 
    { 
     get { return (DayOfWeek) DayOfWeekValue; } 
     set { DayOfWeekValue = (int) value; } 
    } 
} 

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

在生成數據庫時,EF會高興地忽略任何不知道如何映射的類型,但是int屬性將被映射。

注:這是直接取自我的回答另一個enumEF問題:EF 4.1 Code First - map enum wrapper as complex type

+0

怎麼樣使用codefirst/initialisers在數據庫中播種類型。我是否需要手動將枚舉與插入自己綁定? – jaffa 2011-06-14 13:40:36

+0

@jaffa - 你可以添加一些代碼,如何你最好能夠初始化數據庫?然後我們可以從那裏工作。 – 2011-06-14 13:42:40

+0

@Sergi - 在我做之前,也許我誤解了一些東西。你的顏色類型,這只是你的代碼內部的東西,還是在數據庫中有1-Red,2-Blue,3-Green等的底層表格......? – jaffa 2011-06-14 14:07:48