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

时间:2012-09-11 13:58:45

标签: c# linq entity-framework entity-framework-5

过去几年我一直在使用Linq2Sql并习惯了一些功能,比如在DB中有一个inttinyint字段,我在DBML文件中重新定义了枚举类型,所以直接运行SQL查询与枚举相比是好的和方便的(请参阅here 3年前关于该主题的问题,以及那里的answer

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

有没有人找到一种干净利落的方法,所以我可以查询:

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

(不,我不想强​​制转换为intbyte内联。)

1 个答案:

答案 0 :(得分: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
}

您可以查询:

db.Events.Where(e => e.Status == Status.Pending)

数据库优先

正如this post中所解释的,这是你如何为Database First完成同样的事情。

  

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