【问题标题】:Creating Enums from Entities从实体创建枚举
【发布时间】:2009-08-05 03:51:03
【问题描述】:

我有名为事件和日志的表。事件表由 ID、事件描述和类型组成。并且,Log包含LogID、EventID(指的是Event表中的ID)和timstamp。

我正在使用实体框架。在日志表中创建条目时,我提到事件 id 作为与事件表中的日志事件对应的编号。当我继续在应用程序中使用此日志记录时,记住已记录事件的事件 ID 变得很麻烦。我想在我的代码中将这些事件 ID 映射为枚举,并仅使用枚举以获得更好的可用性。

有没有人使用这种方法创建枚举?如果是这样,请分享您对创建设计的想法。

【问题讨论】:

    标签: .net ado.net linq-to-entities wcf-data-services


    【解决方案1】:

    这是可能的,但您必须手动定义enum。

    这是否是好的设计取决于您定义的不同事件的数量以及时间。是否可以创建新的事件定义而不必更改代码?在这种情况下,enum 可能不是一个好主意。如果事件 ID 列表是静态的且不太大,那么 enum 是可以接受的,并且(在我看来)甚至是值得鼓励的。

    编辑:抱歉,我提供的解决方案实际上是在 LINQ to SQL 中完成的,而不是 Entity Framework 1.0。一定是缺少咖啡。它在 EF 中完成的方式是在部分类中定义正确类型的属性。

    例如,我的数据库中有一个 EventType 列,我想将其映射到 enum。我已将 property 从默认的 EventType 重命名为 EventTypeInt,如下所示:


    (来源:subbot.net)

    然后将此列的 Getter 和 Setter 属性设置为 private(在您可能用来重命名 EventType 的属性管理器窗口中)。完成并保存后,使用以下代码:

    public enum EventType
    {
        Unknown = 0,
        Concert = 1,
        Festival = 2
    }
    
    public partial class EventCalendar
    {
        public EventType EventType
        {
            get { return (EventType)EventTypeInt; }
            set { EventTypeInt = (int)value; }
        }
    }
    

    是的,这很乏味。它在 LINQ to SQL 模型中更加实用。

    【讨论】:

    • Thorarin,我的 eventID 是固定的,尽管列表可能会在一段时间内增长。也许,我错过了使用 global::. 的重点。一个例子或参考会很棒!
    • Doh,难怪你没有抓住重点……我想的是 LINQ to SQL,而不是实体框架。我已经更新了我的答案。
    • @Thorarin:很抱歉延迟回复。我想,我需要重命名“EventType”之一,因为它在构建过程中会引发歧义错误。我将枚举重命名为 EventTypeEnum 以克服错误。
    • 好吧.. 就是这样。 EventType:int 是对表 EventType 的引用。使用您的枚举解决方案,可能我什至不需要 EventType 表,而是将 EventCalendar 中的 EventType 列作为非引用列。但是,这会将 eventype 的可能值完全留在 BL 代码上。我不确定,如果这是一个好的设计。另一方面,在 DB 上保留 EventType 表并在 BL 代码上定义 Enum 会导致两个事件类型列表副本断开连接。我现在会同时维护 EventType 表和枚举。
    【解决方案2】:

    您是否考虑过将它们表示为实体集中的导航属性而不是创建 ENUMS?

    【讨论】:

    • 您能否对此进行更多说明?一个例子或参考会很棒!
    • 在您最初的描述中,您说过“事件表由 ID、事件描述和类型组成。并且,日志包含 LogID、EventID(指事件表中的 ID)和 timstamp。”我认为这意味着您在 EventID 列和事件表中的 ID 之间存在外键关系。如果是这种情况,如果您从数据库生成 EDMX 文件,EF1 将基于此关系创建导航属性。这些导航属性将允许您像使用数据库一样执行查找。例如:logInstance.Event.ID 会给你相应的事件 ID。
    • 这篇 msdn 文章提供了一个很好的概述:msdn.microsoft.com/en-us/library/bb896321.aspx
    • 谢谢格雷厄姆!我会看的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多