12

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

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

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

4

6 回答 6

1

我不知道最好的解决方案是什么,我想听听。我们的解决方案是显式键入枚举,如

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

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

于 2008-11-15T10:23:00.877 回答
1

或者也许将枚举值作为字符串存储在数据库中。ToString();

于 2008-11-15T10:25:08.283 回答
1

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

于 2008-11-15T11:23:34.280 回答
0

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

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

于 2008-12-10T23:55:34.050 回答
0

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

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

于 2008-11-15T10:34:31.103 回答
0

不久前,我为我的公司构建了一个小工具来执行此操作,该工具将使用枚举字段上的属性来允许与数据库中的表“同步”。

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

于 2008-11-20T23:13:46.170 回答