C#Enum使用Sql Server表中的值

时间:2010-12-01 20:14:07

标签: c# sql-server-2005

目前我的SQL Server 2005表格看起来有点像:

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#代码中手动对表中的值进行任何更改/添加?

5 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:3)

我最近必须考虑类似的事情(refactoring an enum) - 基本上我考虑使用字典<A, B&gt;存储枚举值。如果需要,可以从表中动态加载以填充字典。

我要添加的一件事 - 如果你要用已经存在的动态取代已经存在的枚举,你将不得不考虑你将如何动态填充异常所引发的异常。< / p>

答案 2 :(得分:1)

对我而言,这取决于枚举/数据库查找表的更改频率。在我们的系统中,我们有大约六个这样的enum / lookups,我不介意重新编译以添加一个emum选项+ DB row becuase:

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

答案 3 :(得分:0)

另一种方法是实现一个自定义对象,其ID,Name和Desc属性将封装数据库表。

答案 4 :(得分:0)

我接受Jon建议的内容,但如果您希望在数据库中使用您的枚举列表并希望在代码中使用它们,则可以使用TypeTable中的nHydrate功能项目