EF5 不会创建枚举列

本文关键字:枚举 创建 EF5 | 更新日期: 2023-09-27 17:56:55

我有一个这样的模型:

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 不会创建枚举列

您似乎正在使用 EF5 和目标 .NET Framework 4。这是行不通的,因为 EntityFrameork 使用的 .NET Framework 4 中的 System.Data.Entity.dll.dll 无法处理枚举。您需要迁移到 EF5 和 .NET Framework 4.5 或 EF6,在那里您可以面向 .NET Framework 4 并使用枚举,因为 EF6 不再依赖于 .NET Framework 中附带的组件。

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

我用这个,它有效...并且枚举不会在数据库上创建为 TABLE。如果需要,该视频演示如何在数据库上创建枚举。

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 在内部处理枚举。您不必担心它们。我用过枚举,它们工作正常。但是,如果您想将枚举显式存储在数据库中,那么我建议您在自己的代码中创建滚动。但是,您应该注意,创建实体也具有与枚举相关的通常仪式。

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

在 EF 6 中,如果使枚举类型派生自 uint 而不是默认的 int,您还会发现此行为会发生。

public enum LogStatus : uint

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

public enum LogStatus

默认为 int 基础和代码优先很乐意自动创建此列。