4

过去几年我一直在使用 Linq2Sql,并习惯了一些特性,比如在 DB 中有一个intortinyint字段,我在 DBML 文件中将其重新定义为枚举类型,因此运行 SQL 非常方便直接与枚举进行比较的查询(请参阅此处了解我 3 年前关于该主题的问题,以及那里的答案)。

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

有没有人找到一种方法可以干净地做到这一点,以便我可以进行如下查询:

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

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

4

1 回答 1

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)

数据库优先

正如这篇文章中所解释的,这就是你如何为 Database First 完成同样的事情。

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

于 2012-09-11T14:24:20.647 回答