如何避免代码中的Enum值与数据库中的相应值之间的依赖关系?

时间:2008-11-15 10:16:19

标签: c# enums

我有许多在我的ASP.NET应用程序中测试的用户权限。这些权限值在Enum中引用,以便我可以方便地测试权限,如下所示:

  • btnCreate.Enabled = PermissionManager.TestPermission(Permission.AllowCreate);

但是,我也将这些权限存储在数据库中,因为我需要保存有关它们的更多信息,而不仅仅是它们的ID。但是这会在枚举值和数据库中的值之间产生可怕的依赖关系,这是对两者的一个考虑不周的变化,我在整个应用程序中都遇到了问题。有没有更好的解决这个问题的方法?有没有人以前处理过这个问题?

6 个答案:

答案 0 :(得分:1)

我不知道最佳解决方案是什么,我想听听。 我们的解决方案是明确键入类似

的枚举
public enum MyEnum : int 
{
   None =0,
   Value = 1,
   AnotherValue =2 
}

并将整数值保存到数据库中。例如,当删除值1时,您仍然可以使用枚举,而AnotherValue仍然在数据库中具有值2.

答案 1 :(得分:1)

或者可以将枚举值作为字符串存储在DB中。的ToString();

答案 2 :(得分:1)

只要您从不更改已分配的值,就可以使用枚举值。如果您在.NET中使用基于角色的标准授权,那么您仍然会依赖于数据库中相应角色表中某些文本字符串的存在。

答案 3 :(得分:0)

我们使用一个小应用程序从数据库生成枚举代码(例如:NorthwindEnums.cs)。我们确保在数据库发生变化时运行它并更新受影响的库。

我们还尝试将我们的枚举从0开始并按顺序排列,以避免C#中的Web服务引用出现问题。

答案 4 :(得分:0)

前段时间我为我的公司构建了一个小工具,它将使用枚举字段中的属性来允许与数据库中的表“同步”。

该工具可以扫描程序集并生成适当的INSERT / UPDATE SQL命令,这些命令可以将数据库与代码中的枚举定义同步。

答案 5 :(得分:0)

我在任何需要在代码中作为枚举访问的表上添加扩展属性。然后我使用代码生成软件(codesmith,T4,无论如何)通过查找具有此属性的任何表来为我生成我的所有枚举。任何用于此目的的表都遵守一些基本规则(必须有一个Name列等),因此代码生成器知道哪个列用作枚举元素的名称。

一旦将值添加到这些表中,我们就会注意几乎不要更改它们以避免破坏构建。