过去几年我一直在使用Linq2Sql并习惯了一些功能,比如在DB中有一个int
或tinyint
字段,我在DBML文件中重新定义了枚举类型,所以直接运行SQL查询与枚举相比是好的和方便的(请参阅here 3年前关于该主题的问题,以及那里的answer。
现在我正在使用Entity Framework 5开始一个项目,虽然EF看起来已经有很多东西正确,L2S没有(例如分离/重新连接),我很沮丧地看到似乎没有可以轻松地将这样一个字段的C#类型改为枚举。
有没有人找到一种干净利落的方法,所以我可以查询:
var q = entities.Things.Where(t => t.Status == TStatus.Closed);
(不,我不想强制转换为int
或byte
内联。)
答案 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完成同样的事情。
转到模型浏览器并创建一个新的枚举类型,然后转到您希望使用它的任何列,并将其类型更改为您刚刚创建的枚举。