C# 在实体框架中将tinyint字段表示为枚举

C# 在实体框架中将tinyint字段表示为枚举,c#,linq,entity-framework,entity-framework-5,C#,Linq,Entity Framework,Entity Framework 5,在过去的几年中,我一直在使用Linq2Sql,并且已经习惯了一些特性,比如在数据库中有一个int或tinyint字段,我在DBML文件中重新定义该字段为枚举类型,因此直接与枚举相比运行SQL查询非常方便(关于我3年前关于这个问题的问题,请参阅,以及那里的答案) 现在我正在使用Entity Framework 5启动一个项目,虽然EF似乎已经做了很多L2S没有做的事情(例如分离/重新连接),但我很沮丧地看到,似乎没有任何简单的方法可以将此类字段的C类型更改为枚举 是否有人找到了一种干净的方法,这样

在过去的几年中,我一直在使用Linq2Sql,并且已经习惯了一些特性,比如在数据库中有一个
int
tinyint
字段,我在DBML文件中重新定义该字段为枚举类型,因此直接与枚举相比运行SQL查询非常方便(关于我3年前关于这个问题的问题,请参阅,以及那里的答案)

现在我正在使用Entity Framework 5启动一个项目,虽然EF似乎已经做了很多L2S没有做的事情(例如分离/重新连接),但我很沮丧地看到,似乎没有任何简单的方法可以将此类字段的C类型更改为枚举

是否有人找到了一种干净的方法,这样我就可以进行如下查询:

var q = entities.Things.Where(t => t.Status == TStatus.Closed);

(不,我不想强制转换为
int
byte
内联)。

先编码

EF5代码首先支持.NET 4.5上的枚举属性。以下实体将在数据库中创建int字段:

public class Event
{
    public int EventId { get; set; }
    public Status Status { get; set; }
}

public enum Status
{
    Open,
    Closed,
    Pending
}
您可以查询到:

db.Events.Where(e => e.Status == Status.Pending)
数据库优先

如中所述,以下是如何首先为数据库完成相同的任务

转到“模型浏览器”并创建新的枚举类型,然后转到要在其上使用的任何列,并将其类型更改为刚创建的枚举


请注意,它只能在.net 4.5上运行(而EF5也在早期版本上运行)。发现了这个问题:我无意中听说,在.net 4和4.5之间运行EF5 CF的唯一区别是,在4中,它不使用新的性能improvements@DanielHilgarth按设计:“当针对.NET 4.5此版本时[EF 5]介绍了一些新功能,包括枚举支持、表值函数、空间数据类型和各种性能改进。“@GoranObradovic我很抱歉让您失望,但您无意中听到了错误。请参阅上面的链接。