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基础,代码优先自动创建此列。
- 为什么.net 4.0项目不能引用4.5程序集?
- Howto:Parallel.Foreach在每个进程运行一个新进程(但一次只有一个进程)后执行许多进程?
- 在缩小javascript时,System.Web.Optimization会更改js文件的顺序
- ReactiveUI 5.0.2中缺少ReactiveAsyncCommand
- 一个任务可以有多个等待者吗?
- 使用“非常非常”的大型数组
- 是否有一种简单的方法来获取.NET为参数化查询生成的“sp_executesql”查询?
- 带有方括号的Uri.EscapeUriString
- 为什么’任何CPU(更喜欢32位)’允许我在.NET 4.5下分配比x86更多的内存?