代码之家  ›  专栏  ›  技术社区  ›  Pawan Nogariya

将C#枚举作为数据库中的视图公开

  •  0
  • Pawan Nogariya  · 技术社区  · 6 年前

    假设数据库中有一列可以接受C代码中定义的枚举的任何一个值。

    通常有一种方法可以使它对数据库可用,即将它存储在数据库表中并从那里引用它。

    但有时你不想把枚举存储在数据库中,而只想在代码中维护它,对于这些情况,我在我的项目中提出了一个解决方案,它将返回枚举的值,这样我们就不必在数据库中硬编码它,所以在数据库中有这样的东西

    CREATE VIEW ENUM.ValidationFailReasonTypes
    AS
    SELECT 1 AS [FormLevel], 2 AS [GridLevel]
    

    对于枚举

    public enum ValidationFailReasonTypes
    {
        FormLevel = 1,
        GridLevel = 2
    }
    

    0 回复  |  直到 6 年前
        1
  •  3
  •   Neville Kuyt    6 年前

    这要看情况了。

    像我这样的老派数据库专家希望您在数据模型中建立有效性检查。看到了吗 this question 你会怎么做。最终会得到一个良好的、自文档化的模式,它保证应用程序只能包含ValidationFailReasonTypes的有效条目。

    另一种观点是,数据库只是一种存储机制,应用程序作为数据有效性的保证是完全可以的,特别是当它有大量的单元测试时。在本例中,您使用C#中的枚举,编写单元测试来验证条目是否符合您的期望,并接受这样一个事实:您的数据库表有一个整数列,该列可能包含许多值,但应用程序将其限制为(1,2)。

    一般来说,我会使用枚举来表示没有新版本的应用程序就不会更改的值,这通常是因为您启用了一些新功能。

    我希望使用数据库条目来处理业务域中可能独立于应用程序版本而发生更改的内容。”“网格级”和“表单级”感觉像是应用程序中的特性,所以我认为枚举是可以的。

        2
  •  0
  •   UnhandledExcepSean    6 年前

    枚举的全部原因是编码时的一致性、清晰性和易用性。我想你也会希望在数据库方面有这样的清晰性和一致性。如果将枚举值持久化到数据库,则绝对应该对列和相应的定义表具有引用完整性。在我看来,这景色对你毫无帮助。