如何使 C# 枚举与数据库中的表保持同步

2023-11-21

这是一个稍微简化的示例(我对其进行了更改以隐藏实际代码)。 我有一个数据库驱动的应用程序和一个单独开发的小工具,旨在与该应用程序一起使用。有一个表定义了枚举,但它可能会随着时间的推移而改变。假设某个应用程序(医疗?)需要相当精确地跟踪一个人的性别。

select * from sex order by id;

id | mnemonic | description
0  | U        | Unknown sex
1  | M        | Male
2  | F        | Female
3  | T        | Trans-gender

And my C# enum:

public enum SexType
{
    /// <summary>Unknown sex.</summary>
    [Description("U")]
    Unknown = 0,

    /// <summary>Male sex.</summary>
    [Description("M")]
    Male = 1,

    /// <summary>Female sex.</summary>
    [Description("F")]
    Female = 2

    /// <summary>Trans-gender sex.</summary>
    [Description("T")]
    TransGender = 3,
}

这里我不应该假设id是一个连续的序列;这些枚举标志也不能组合,尽管看起来可能是这样。

部分逻辑是用SQL完成的;有些是在C#代码。例如,我可能有一个函数:

// Here we get id for some record from the database.
public static void IsMaleOrFemale(int sexId)
{
    if (!Enum.IsDefined(typeof(SexType), sexId))
    {
        string message = String.Format("There is no sex type with id {0}.", 
            sexId);
        throw new ArgumentException(message, "sexId");
    }

    var sexType = (SexType) sexId;
    return sexType == SexType.Male || sexType == SexType.Female;
}

只要表和枚举定义都没有改变,这种方法就可以很好地工作。但桌子可能会。我不能依赖 id 列或助记符列来维护它们的值。我认为我能做的最好的事情就是进行单元测试,以确保该表与我对枚举的定义同步。我试图将值与 id 相匹配,将描述属性与助记符列相匹配。

那么,如何获取所有对的列表(以编程方式,在C#): (0, "U"), (1, "M"), (2, "F"), (3, "T")通过查看enum SexType?

这个想法是将这个有序列表与select id, mnemonic from sex order by is asc;.


为什么不将 SexType 从枚举更改为类(或结构)并在运行时从数据库填充列表?

你的结构(或类)看起来像这样:

public struct SexType
{
  public string Type;
  public string Code;
  public int Value;
}

然后你可以从数据库中填充List<SexType>(或者,如果您使用 EF,您可以下拉 SexType 类型的实体列表,或者您的解决方案允许的任何内容)。

假设您正在使用 Linq 和 EF,在应用程序启动时进行预先加载,您应该就可以开始了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 C# 枚举与数据库中的表保持同步 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 在 $.getJSON() 之外访问 json 数据

    document ready function var value getParmsVals search getJSON api search GetQuestionByKey value function jsonData jsonDa
  • 在 Visio 2003 中使用 UML 2.0 的最佳方法是什么?

    Visio 2003 使用 UML 1 4 这意味着 UML 2 0 中的一些刻板印象根本不存在 它们需要通过手绘来建模 我可能还使用 Photoshop 有谁知道 Microsoft 的更新或在 Visio 2003 中包含 UML 2
  • 在 Bootstrap 3 中用 Glyphicons PRO 替换标准 Glyphicons Halfling?

    我已经购买了完整的 Glyphicons PRO 软件包 并希望将其与 Bootstrap 3 一起使用 但是 我似乎无法找到有关如何执行此操作的全面文档 Glyphicons 网站缺少 如何使用 部分 并且随附的 PDF 也没有太大帮助
  • 如何查看我的客户端应用程序发送的 SOAP 数据?

    我有一个项目 我使用 wsdl exe 创建了 Web 服务代理类 然后简单地创建该类的实例 继承 System Web Services Protocols SoapHttpClientProtocol 并调用应发送 SOAP 消息的方法
  • 在 Vista/Windows 7 WPF FileDialog.Filter 中隐藏扩展

    我在 NET 4 WPF 应用程序中使用 WPF OpenFileDialog 和 SaveFileDialog 我使用 Filter 属性来允许用户设置不同的文件过滤器 在 NET 4 中 这使用 Windows Vista 引入的本机文
  • Firestore 读取具有自身条件的规则

    我目前正在尝试在 firebase 上构建小型应用程序作为对其的评估 它看起来很有趣并且非常高效 但我对 Firestore 规则有一个问题 我有一个集合 游戏 其对象如下所示 name String description String
  • 垂直对齐 ggplot2 绘图

    代码位于https gist github com low decarie 5886616可以生成双树状图平铺图 Dual dendogram tile plot as matrix USArrests main 美国逮捕 问题 将垂直树状
  • C# 如何获取来电显示?

    我想使用 56K 调制解调器获取拨打家庭电话的电话号码 有没有办法用 C 来实现这一点 并非所有调制解调器都支持主叫号码 对于那些这样做的人 制造商之间的实施方式有所不同 呼叫者 ID 通过串行数据传递 因此您必须使用TAPI库 或使用 W
  • 如果我想要空插值(分段常数),那么 numpy.interp 的最佳替代品是什么?

    numpy interp很方便 也比较快捷 在某些情况下 我想将其输出与非插值变体进行比较 其中稀疏值被传播 在 更密集 的输出中 并且结果是稀疏输入之间的分段常数 我想要的函数也可以称为 稀疏 gt 密集 转换器 它复制最新的稀疏值 直到
  • React Native 和 THREE.js(WebGL 库)集成

    我正在开发一个使用 React Web 和 React Native 的项目 我已经实现了一个 React Web 组件 它允许您从 OBJ MTL 和图像文件加载 3D 模型 加载模型后您可以对其进行编辑 在其上附加 3D 标签等内容 最
  • 期望有根视图控制器控制台的应用程序

    当我运行我的应用程序时 我在控制台中收到一条消息 2011 11 16 19 17 41 292 Juice 8674 707 应用程序预计在应用程序启动结束时有一个根视图控制器 我听别人说这与方法有关didFinishLaunchingW
  • 我可以在卫星程序集中合并本地资源吗?

    我有很多本地资源文件 Controls App LocalResources SomeControl ascx resx Pages App LocalResources SomePage aspx resx 等 我想添加另一种语言 但我不
  • Windows 窗体:检测焦点控件的变化

    我正在 Windows 窗体应用程序中实现复制粘贴 当用户更改应用程序中的焦点元素时 我需要启用 禁用这两个操作的栏按钮 我可以使用这样的方法找到当前的焦点控件 http www syncfusion com FAQ windowsform
  • Delphi:确定泛型的实际类型?

    有什么方法可以确定作为参数传递给方法的变量的类型吗 考虑一下这个类 TSomeClass class procedure AddToList
  • 如何检查 mysqli_query 是否删除了任何行[重复]

    这个问题在这里已经有答案了 我创建了从数据库中删除一些数据的函数 这是其中的一部分 mysqli query con DELETE FROM appsdata WHERE ownerID 123 但我想检查删除了多少行 mysql quer
  • 通过查找/替换 (Ctrl+F) 删除 Eclipse 代码编辑器中的空行

    我想通过 Eclipse 代码编辑器中的查找 替换方法从代码中删除所有空白行 我使用了正则表达式 n s n找到所有空白行但出现错误 Incompatible line delimiter near index 55110 用任何字符串替换
  • 如何获取特定类型类实例的多态函数的类型?

    例如 输入 t ap在 GHCi 中给出结果 ap Monad m gt m a gt b gt m a gt m b 如果我已经知道我要使用的 Monad 实例是 gt r 如何查询类型ap对于那个特定的例子 As 激光烟说作为评论你可以
  • 使用 Eclipse/Tomcat 自动将第 3 方 jar 添加到 WEB-INF/lib [重复]

    这个问题在这里已经有答案了 我在 Eclipse 上设置了一个动态 Web 项目 并使用 Tomcat 7 作为我的 Web 服务器 它似乎不会自动将我添加到构建路径上的库中的第 3 方 JAR 放入 WEB INF lib 文件夹中 有没
  • 创建 IE 插件

    我正在寻找为 IE 8 或 9 制作插件的教程 你能给我提供资源吗 拜托 为了和平和其他一切 我已经知道我可以制作 FF 或 Chrome 插件 我want制作一个 IE 插件 Thanks 你见过吗这个网站
  • 如何使 C# 枚举与数据库中的表保持同步

    这是一个稍微简化的示例 我对其进行了更改以隐藏实际代码 我有一个数据库驱动的应用程序和一个单独开发的小工具 旨在与该应用程序一起使用 有一个表定义了枚举 但它可能会随着时间的推移而改变 假设某个应用程序 医疗 需要相当精确地跟踪一个人的性别