我有一个这样的模型:
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会像这样?有一个我不知道的环境吗?
答案 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基础,代码优先自动创建此列。