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

Sha*_*ica 4 c# linq entity-framework entity-framework-5

我过去几年一直在使用Linq2Sql,并习惯了一些功能,比如在DB中有一个int或一个tinyint字段,我在DBML文件中重新定义为枚举类型,所以运行SQL很方便查询与enum直接比较(请参阅此处 3年前关于该主题的问题,以及那里的答案).

现在我正在使用Entity Framework 5开始一个项目,虽然EF看起来已经有很多东西正确,L2S没有(例如分离/重新连接),我很沮丧地看到似乎没有任何容易将这种字段的C#类型更改为枚举的方法.

有没有人找到一种干净利落的方法,这样我就可以得到如下查询:

var q = entities.Things.Where(t => t.Status == TStatus.Closed);
Run Code Online (Sandbox Code Playgroud)

(不,我不想要投射intbyte内联).

Joe*_*ari 5

代码优先

EF5 Code First支持.NET 4.5上的枚举属性.以下实体将int在数据库中创建一个字段:

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

public enum Status
{
    Open,
    Closed,
    Pending
}
Run Code Online (Sandbox Code Playgroud)

你可以查询:

db.Events.Where(e => e.Status == Status.Pending)
Run Code Online (Sandbox Code Playgroud)

数据库优先

正如本文中所解释的,是你如何为Database First完成同样的事情.

转到模型浏览器并创建一个新的枚举类型,然后转到您希望使用它的任何列,并将其类型更改为您刚刚创建的枚举.

  • 发现这个问题:http://stackoverflow.com/questions/11595008/enums-ef-5-0-database-first (2认同)