1

我有這樣一個模型:EF5不會創建枚舉列

namespace Ad.NegCred.Data.Model { 
    public enum DataKind { 
     F, //Takibe alınıp henüz tahsil edilmeyen ferdi kredi bildirimi 
     FA, //Aynı dönemde takibe alınan ve tahsil edilen ferdi kredi bildirimi 
     FF, //daha önceki dönemlerde takibe alındığı bildirilmiş ferdi kredi tahsil bildirimi 
     K, //Takibe alınıp henüz tahsil edilmeyan kredi kartı 
     KA, //Aynı dönemde takibe alınan ve tahsil edilen kredi kartı 
     KF //Daha önceki dönemlerde takibe alındığı bildirilmiş kredi kartı tahsil bildirimi 
    } 

    public class Datum { 
     [Key] 
     public long Id { get; set; } 
     public DataKind Kind { get; set; } 
     [StringLength(25, MinimumLength = 2)] 
     public string Name { get; set; } 
    } 
} 

在數據庫中創建EF,所有列,但Kind列創建。另一個枚舉列是未在此處顯示的複雜類型的一部分,也不會創建。

爲什麼EF 5的行爲如此呢?有沒有我不知道的設置?

+0

這幾乎就像EF4的行爲。什麼是您使用的EntityFramework.dll的版本?你不是針對.NET Framework 4的嗎? – Pawel

+0

@ Pawel-抱歉遲到。從解決方案資源管理器訪問的屬性頁顯示運行時版本v4.0.30319,版本4.4.0.0和從Windows資源管理器訪問的屬性頁顯示文件Varsion 4.4.20627.0,產品版本5.0.0.net40。你可能是對的。我會檢查它。 – koducu

+0

v4.4.0.0意味着您使用的是EF5,但是面向.NET Framework 4.這就是爲什麼您不會獲得枚舉類型 - System.Data.Entity.dll在EntityFramework.dll使用的.NET Framework 4中不使用'不知道如何處理它們。 – Pawel

回答

7

您似乎正在使用EF5和目標.NET Framework 4.由於EntityFrameork.dll使用的.NET Framework 4中的System.Data.Entity.dll無法處理枚舉,因此無法使用。您可能需要轉移到EF5和.NET Framework 4.5或EF6,因爲您可以將.NET Framework 4作爲目標並使用枚舉,因爲EF6不再依賴.NET Framework中提供的組件。

+0

非常感謝您的準確答覆帕維爾。我是EF5的新手,並沒有遇到過在.Net 4上提到EF5枚舉問題的解釋。他們都宣稱EF5處理枚舉。 – koducu

+0

+1:謝謝你,你救了我很多麻煩。 – Ashkan

0

應工作好,看到MS EF網站 http://msdn.microsoft.com/en-us/data/hh859576

我用這個和它的作品......而枚舉不作爲數據庫表創建的。 該視頻演示如何在數據庫上創建ENUM(如果需要)。

namespace XYZ.Core.Enum 
{ 
public enum MasterEventType : int 
{ 
    Undefined = 0, 
    Logon = 1, 
    Logoff = 2, 
} 
} 

namespace XYZ.Core.Model 
{ 
public class MasterUserEventLog 
{ 
    // the rest is not relevant here.... 
    public MasterEventType EventType{ get; set; }  // what happened 
} 
{ 
0

沒有表格將由EF創建,這是由設計。 EF在內部處理枚舉。你不必擔心他們。我用過Enum,它們工作正常。如果你想在數據庫中明確地存儲Enum,那麼我建議在你自己的代碼中創建滾動。但是,您應該注意到,製作實體也有與之相關的通常儀式。

您可以訪問鏈接http://msdn.microsoft.com/en-us/data/hh859576.aspx明確寫明Ef不爲Enum創建任何表。

+1

但這不是問題。 _column_未創建。 –

0

在EF 6中,如果您將枚舉類型從uint而不是默認的int派生出來,您還會發現此行爲。例如

public enum LogStatus : uint 

以上將不會自動所以你必須放下UINT部分生成代碼首先遷移列:

public enum LogStatus 

它默認爲int的基礎和代碼首先是樂於創造此欄自動。