1

我有一个这样的模型:

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

4 回答 4

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 中提供的组件。

于 2013-02-04T18:31:42.927 回答
0

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

我使用它并且它可以工作......并且 Enum 没有在 DB 上创建为 TABLE。该视频向您展示了如何根据需要在 DB 上创建 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
}
{
于 2013-02-01T16:12:41.393 回答
0

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

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

于 2013-02-01T16:41:52.450 回答
0

在 EF 6 中,如果您使枚举类型从 uint 而不是默认的 int 派生,您也会发现这种行为。例如

public enum LogStatus : uint

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

public enum LogStatus

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

于 2016-04-23T10:23:53.707 回答