从数据库或反之亦然生成枚举?

时间:2011-09-01 17:13:01

标签: c# enums t4

我正在试图找出执行此操作的“正确”方法。我在我的数据库中有一堆查找表,并希望在这些值之上放置一个枚举,因此,在编码时,它更容易阅读(以及不使用硬编码值)。

我想知道是否应该根据现有的枚举生成我的表值,或者是否应该根据表的值生成枚举。

修改

根据前几条评论,这里有一些澄清:

值的变化频率可能相当频繁,因为它们的目的是相当动态。话虽如此,在添加任何一种方法之前都需要进行编译,因为需要更新枚举以公开新值。

这种需求的主要原因是因为我们不希望将人们绑定到特定的值列表,我们希望应用程序能够在需要时添加新条目。

过去,我们已经从枚举中生成了数据,但我是第二次猜测自己

2 个答案:

答案 0 :(得分:1)

我们通常从数据库生成枚举。我们使用CodeSmith,它允许我们创建项目文件,可以根据需要轻松重新生成枚举。

我们偶尔会采用其他方式,通常用于报告目的(当现有的枚举值保持不变时)。

当然,我们的枚举值永远不会存在。

通常,从数据库生成枚举的唯一原因是代码是否需要根据它们做出决策。如果您只想填充ComboBox并坚持用户的选择,请不要生成枚举。

显然,根据值可以更改的枚举(或字符串)做出决策是脆弱的。您可能需要考虑在数据库模式中包括过期日期(或“从”和“到”日期),以便不删除现有值。填充UI选择器时筛选过期的值。这也使得引用完整性变得更容易。

与C#一样,您必须知道枚举值可能超出预期范围。在default上添加switch

我们提出了帮助类来创建缓存查找列表,使这些更容易使用。

我不是主张走这条路。如果必须,我们就是这样做的。

答案 1 :(得分:0)

还有第三个选项,你有一个显式模型,它描述了你需要的详细程度的模式,然后你生成数据和&该模型的架构。

关于你的问题,我认为你应该做的是在你的背景下思考问题,并列出每个选择的优缺点,并决定什么对你和你的企业最有意义。

我曾为不同的应用程序工作过所有三种策略,我个人更喜欢的是根据上下文设置明确的模型。

对于模糊而感到抱歉,但我认为对于这些问题,真正的黄金法则始终适用于所有情况。