【问题标题】:Should I store Enum ID/values in the database or a C# enumeration?我应该将枚举 ID/值存储在数据库中还是 C# 枚举中?
【发布时间】:2010-10-21 22:04:21
【问题描述】:

假设我的数据库表有 UserTypeSalesType 等列。

我应该有带有UserTypeIDuserTypeName 的数据库表,还是应该只创建一个 C# 枚举?

【问题讨论】:

标签: c# database enums constants


【解决方案1】:

两者都有什么问题?如果值是用户定义或更改的,那么enum 肯定不合适。

如果值是严格不变的(例如性别),您可以将它们设置为 enums,以便在应用程序和数据库中作为单独的表进行引用,以强制执行外键并作为参考。

【讨论】:

    【解决方案2】:

    如果列表足够稳定可以使用枚举,那么我会在您的代码中使用枚举加上数据库中的表(使其成为数据一致性的外键)。

    【讨论】:

      【解决方案3】:

      这取决于。我在下面列出了每种方法的一些优点和缺点。一般来说,如果应用程序需要使用一个值来做出决策,我更喜欢枚举。正如 Mehdrad 所提到的,您可以同时使用这两种方法,但需要付出额外的努力才能使列表保持同步。

      查找表:

      • 可以强制执行参照完整性 通过外键
      • 易于添加或删除现有值
      • 可以扩展表格以添加其他字段(活动标志等)
      • 如果使用业务对象,则需要额外的类
      • 报告中易于使用的价值和描述

      枚举:

      • 检查约束可以强制数据完整性
      • 如果代码需要使用值进行分支(例如 x == SalesType.Web 与 x == "WEB"),则为最佳选择
      • 需要软件版本才能更改值
      • 无法在 SQL 查询中显示描述(没有 CASE)
      • 枚举可能不适合在 UI 中显示(有解决方法)

      【讨论】:

        【解决方案4】:

        在我的项目中,我使用我的应用程序 dbscript 从数据库生成 C# 常量,因此代码始终与 db 值匹配。

        当然,如果您的代码根据 Type 字段的值执行特定操作,您只需要使用 C# 枚举。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-27
          • 2019-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多