2010-12-01 72 views
3

目前,我有一个SQL Server 2005的表,看起来有点像:在SQL Server表C#枚举使用值

 
ID | name | desc 
---------------------- 
1 | ONE | Value One 
3 | THREE | Value Three 
5 | FIVE | Value Five 

此表在C#中的枚举,看起来像对应:

enum MsgTypes{ 
    <summary>Value One</summary> 
    ONE = 1, 
    <summary>Value Three</summary> 
    THREE = 3, 
    <summary>Value Five</summary> 
    FIVE = 5 
} 

所以我的问题是这样的:有没有一种很好的方法将枚举关联到SQL表,以便表中的值的任何更改/添加不需要手动在c#代码中进行?

+0

表中需要在C#代码中镜像哪些类型的更改?你在寻找可能改变与'MsgTypes.ONE`关联的ID吗? – StriplingWarrior 2010-12-01 20:25:41

+0

在我的情况下,我认为ID最不可能改变(尽管我不想说这是不可能的)。更可能的情况是名称改变或添加新名称。即“MsgTypes.ONE”变为“MsgTypes.UNO”或“MsgTypes.TWO”被创建。 – chezy525 2010-12-01 20:49:54

回答

11

如果你想让它变得有点动态,为什么要把它作为一个枚举开始呢?只需从应用程序启动时的表格中获取详细信息,并在(例如)Dictionary<int, string>中记住它们。如果你愿意的话,你总是可以将值封装在自己的值类型中,强制范围。

或者,如果您不介意重新编译,您可以在建立时间获取它并自动生成枚举源代码。

3

最近我不得不想一些类似的东西(refactoring an enum) - 基本上我考虑使用字典<A, B>来存储枚举值。如果需要,可以从表中动态加载以填充字典。

我要补充的一件事是 - 如果你用一些动态的东西来替换一个已经存在的枚举,你将不得不考虑你要做什么来动态地填充异常。

1

对我而言,取决于枚举/数据库查找表更改的频率。我们对这样的在我们的系统半打枚举/查找,我不介意重新编译以添加emum选项+ DB行监守:

  1. 这并不经常发生 - 在可能的两倍过去的一年,我能想到
  2. 围绕新选项通常有新的业务逻辑,因此无论如何编码都是必需的。
0

另一种替代方法是使用ID,Name和Desc属性实现自定义对象,以封装数据库表。

0

我接受乔恩建议的内容,但如果您希望在数据库中包含Enum列表并希望在代码中使用它们,则可以使用nHydrate中的TypeTable功能用于您的项目。