Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从实体创建枚举_.net_Ado.net_Linq To Entities_Wcf Data Services - Fatal编程技术网

.net 从实体创建枚举

.net 从实体创建枚举,.net,ado.net,linq-to-entities,wcf-data-services,.net,Ado.net,Linq To Entities,Wcf Data Services,我有名为Events和Log的表。事件表包括ID、事件描述和类型。并且,日志包含LogID、EventID(引用事件表中的ID)和timstamp 我正在使用实体框架。在日志表中创建一个条目时,我将事件id作为事件表中日志事件对应的编号。当我继续在整个应用程序中使用此日志记录时,记住已记录事件的事件id变得很麻烦。我想在我的代码中将这些事件ID映射为enum,并且只使用enum以获得更好的可用性 是否有人使用此方法创建枚举?如果是这样,请分享您对创建枚举的设计想法。您是否考虑过在实体集中将它们表

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

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


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

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

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

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

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

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


(来源:)

然后将此列的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模型中更实用。

您能进一步说明这一点吗?一个例子或参考将是伟大的!在最初的描述中,您说“事件表由ID、事件描述和类型组成。日志包含LogID、EventID(引用事件表中的ID)和timstamp。”我认为这意味着EventID列和事件表中的ID之间存在外键关系。在这种情况下,如果从数据库生成EDMX文件,EF1将基于此关系创建导航属性。这些导航属性将允许您像使用数据库一样执行查找。例如:logInstance.Event.ID将为您提供相应的事件ID。这篇msdn文章提供了一个非常好的概述:谢谢Graham!Thorarin,我的EventID是固定的,尽管列表可能会在一段时间内增长。也许,我忽略了使用全局::。一个例子或参考将是伟大的!Doh,难怪你没抓住重点。。。我想LINQ应该是SQL,而不是实体框架。我已经更新了我的答案。@Thorarin:很抱歉延迟回复。我想,我需要重命名其中一个“EventType”,因为它在构建过程中会抛出歧义错误。我将枚举重命名为EventTypeEnum以克服错误。好的。。给你。EventType:int是对表EventType的引用。使用enum解决方案,我甚至可能不需要EventType表,而是将EventCalendar中的EventType列作为非引用列。但是,这将使EventType的可能值完全保留在BL代码上。我不确定这是不是一个好的设计。另一方面,在DB上保留EventType表并在BL代码上定义Enum会导致断开连接的事件类型列表的两个副本。现在我将同时维护EventType表和enum。