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)
(不,我不想要投射int
或byte
内联).
代码优先
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完成同样的事情.
转到模型浏览器并创建一个新的枚举类型,然后转到您希望使用它的任何列,并将其类型更改为您刚刚创建的枚举.