c# - 将 C# 枚举公开为数据库中的视图
问题描述
假设我在数据库中有一个列可以接受我的 C# 代码中定义的枚举的任何一个值。
有一种常用的方法可以使其对数据库可用,以将其存储在数据库表中并从那里引用它。
但有时您不想将枚举存储在数据库中,而只想在代码中维护它,对于这些情况,我在我的项目中提出了解决方案,以便拥有一个返回枚举值的视图,以便我们不必在数据库中硬编码,所以在数据库中有这样的东西
CREATE VIEW ENUM.ValidationFailReasonTypes
AS
SELECT 1 AS [FormLevel], 2 AS [GridLevel]
对于枚举
public enum ValidationFailReasonTypes
{
FormLevel = 1,
GridLevel = 2
}
所以只是想问这样做是个好主意还是当我们不想将枚举存储在数据库中时有更好的方法来处理这种情况?
解决方案
这一切都取决于。
像我这样的老派数据库人员希望您将有效性检查构建到您的数据模型中。请参阅此问题以了解您将如何做到这一点。您最终会得到一个很好的自记录模式,它保证您的应用程序只能包含 ValidationFailReasonTypes 的有效条目。
另一种观点认为,数据库只是存储机制,应用程序作为数据有效性的保证者是完全可以的,尤其是在它有大量单元测试的情况下。在这种情况下,您在 C# 中使用 ENUM,编写单元测试以验证条目是否符合您的期望,并接受您的数据库表有一个整数列可能包含大量值的事实,但应用程序将其限制为 (1 , 2)。
我认为选择一种方法并坚持下去很重要。你的解决方案——如果我理解正确的话——两者兼而有之。
一般来说,如果没有新版本的应用程序,我会使用枚举来表示不会更改的值,通常是因为您启用了一些新功能。
我希望将数据库条目用于可以在业务域中更改的内容,而与您的应用程序的发布无关。“网格级别”和“表单级别”感觉就像您的应用程序中的功能,所以我认为枚举是可以的。
推荐阅读
- laravel - 为模块生成文档的工具
- git - Git合并过程忽略文件
- javascript - var a= true if (x === 'condition') - it is similar to a ternary, but more like plain english. Is this valid javascript syntax?
- api - 谷歌地图开发水印无法摆脱
- javascript - 网页如何找到要 POST 的值?
- r - r 子集 `x` 和 `labels` 必须是同一类型
- php - PHP code supposed to check a file for an ID not working correctly
- java - How to combine multiple words into a sentence with RxJava2?
- octobercms - OctoberCMS openssl_encrypt() 期望参数 1 是字符串,给定数组
- python - 使用 tkinter 按钮在另一个窗口中控制 Python 乌龟