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的行为如此? 有一个我不知道的环境吗?

您似乎使用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中提供的组件。

应该工作正常,请参阅MS EF网站http://msdn.microsoft.com/en-us/data/hh859576

我使用它并且它有效…并且Enum不是作为DB上的TABLE创建的。 该video向您展示了如何在需要时在数据库上创建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 } { 

EF不会创建任何表格,这是设计的。 EF在内部处理枚举。 你不必担心它们。 我用过Enum,工作正常。 如果您想在数据库中明确存储Enum,那么我建议您在自己的代码中创建滚动。 但是,您应该注意,制作实体也有与枚举相关的通常仪式。

您可以访问链接http://msdn.microsoft.com/en-us/data/hh859576.aspx ,其中清楚地写明,Ef不会为Enum创建任何表。

在EF 6中,如果使枚举类型派生自uint而不是默认int,您还会发现会出现这种情况。 例如

 public enum LogStatus : uint 

以上代码不会在代码首次迁移时自动生成列,因此您必须删除uint部分:

 public enum LogStatus 

默认为int基础,代码优先自动创建此列。