c# - 将 C# 枚举公开为数据库中的 View

标签 c# sql sql-server tsql enums

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

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

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

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

枚举

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

所以只是想问一下这样做是个好主意还是当我们不想在数据库中存储枚举时有更好的方法来处理这种情况?

最佳答案

这一切都取决于。

像我这样的老派数据库人员希望您将有效性检查构建到您的数据模型中。参见 this question你会怎么做。您最终会得到一个漂亮的自记录架构,它保证您的应用程序只能包含 ValidationFailReasonTypes 的有效条目。

另一种观点是,数据库只是一种存储机制,应用程序完全可以保证数据的有效性,尤其是当它有很多单元测试时。在这种情况下,您在 C# 中使用 ENUM,编写单元测试来验证条目是否符合您的期望,并接受您的数据库表有一个可能包含很多值的整数列的事实,但应用程序将其限制为 (1 , 2).

我认为选择一种方法并坚持下去很重要。您的解决方案 - 如果我理解正确的话 - 两者兼而有之。

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

我希望将数据库条目用于业务领域中可以独立于应用程序版本而发生变化的内容。 “网格级别”和“表单级别”感觉像是应用程序中的功能,所以我认为枚举没问题。

关于c# - 将 C# 枚举公开为数据库中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746038/

相关文章:

c# - 在 selenium/webdriver c# 中循环遍历多个 moveToElement

c# - 如何将用户定义的数据类型对象绑定(bind)到 DetailsView?

c# - 捕获异常

sql-server - 在同一硬件/物理服务器上运行的应用程序服务器和 Web 服务器

sql-server - 如何在没有桌面的情况下在 Vagrant 中安装 SQL Server Express 2014?

sql - mssql按小时计算总数

c# - 从 C# 交互窗口访问配置文件

mysql - 不确定我在 sql join 上哪里出错了

java - [Microsoft][ODBC Microsoft Access 驱动程序] 查询表达式中存在语法错误(缺少运算符)

mysql - 在 MySQL 数据库中查找特定值