我有一个这样的模型:
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 使用的 .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 在内部处理枚举。您不必担心它们。我用过枚举,它们工作正常。但是,如果您想将枚举显式存储在数据库中,那么我建议您在自己的代码中创建滚动。但是,您应该注意,创建实体也具有与枚举相关的通常仪式。
您可以访问链接 http://msdn.microsoft.com/en-us/data/hh859576.aspx 其中清楚地写着 Ef 不会为 Enum 创建任何表。
在 EF 6 中,如果使枚举类型派生自 uint 而不是默认的 int,您还会发现此行为会发生。
public enum LogStatus : uint
以上不会在代码优先迁移中自动生成一列,因此您必须删除 uint 部分:
public enum LogStatus
默认为 int 基础和代码优先很乐意自动创建此列。