【问题标题】:Representing a tinyint field as an enum in Entity Framework在实体框架中将 tinyint 字段表示为枚举
【发布时间】:2012-09-11 13:58:45
【问题描述】:

过去几年我一直在使用 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 内联)。

【问题讨论】:

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


    【解决方案1】:

    代码优先

    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 完成同样的事情。

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

    【讨论】:

    • 请注意,它只能在 .net 4.5 上运行(而 EF5 也可以在早期版本上运行)。
    • 我无意中听到 .net 4 和 4.5 运行 EF5 CF 的唯一区别是在 4 中它没有使用新的性能改进
    • @DanielHilgarth 设计。 MSDN:“当面向 .NET 4.5 时,此版本 [EF 5] 引入了一些新功能,包括 枚举支持、表值函数、空间数据类型和各种性能改进。”
    • @GoranObradovic 很抱歉让您失望了,但您无意中听错了。见上面的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多