从实体创建枚举

时间:2009-08-05 03:51:03

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

我有名为Events和Log的表。 Events表包含ID,事件描述和类型。并且,日志包含LogID,EventID(引用事件表中的ID)和timstamp。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

EventCalendar table mapping in model
(来源: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模型中更加实用。

答案 1 :(得分:0)

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