EF5不会创建枚举列

时间:2013-02-01 13:55:21

标签: c# entity-framework ef-code-first entity-framework-5 .net-4.5

我有一个这样的模型:

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会像这样?有一个我不知道的环境吗?

4 个答案:

答案 0 :(得分: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中提供的组件。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在EF 6中,如果你使你的枚举类型派生自uint而不是默认的int,你也会发现会出现这种情况。 e.g。

public enum LogStatus : uint

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

public enum LogStatus

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