.net - 存储在数据库中的过时枚举成员
问题描述
我在 EF6 的实体中有一个枚举,并且在保存枚举时它作为一个字节存储在数据库中。
现在我想将 Enum 的一个值标记为过时,但仍然会有数据使用这个值。它只是没有在代码中使用。
从技术上讲,我想在代码中删除这个值,但是你会如何处理旧数据呢?
迁移?
解决方案
好的做法是遵循以下步骤:
- 数据迁移:用正确的值替换数据库中的过时值。
- 清理代码:删除枚举值,因为不再需要它。
如果由于旧值仍然保留在数据库中而无法进行数据迁移,那么我将按照以下步骤操作:
- 从枚举中设置字段的每个属性设置器或方法都必须添加一些防御性代码。
InvalidOperationException
使用过时的枚举值进行设置时,您会抛出带有显式消息的异常。 - 在枚举定义中,我将添加一个 XML 注释,以
<remark>
帮助开发人员了解正在发生的事情。 - 可选步骤:进一步添加自定义代码分析器以跟踪该值的使用。
注意我没有用[Obsolete]
属性装饰枚举值,因为这个属性意味着两件事:
- 该代码在版本 X 中已过时。
- 该代码将在 X 之后的版本中删除:版本 Y。
这两件事让使用版本 X 的开发人员清理他们的实际代码库(删除所有过时的枚举值的使用)并为版本 Y 做好准备(不需要任何更改,因为所有工作都在使用版本 X 时完成)。您不能使用[Obsolete]
属性,因为您说旧数据仍将存在于数据库中,因此您可能需要在某处显示,而您没有遵循我所说的关于[Obsolete]
属性的两件事。
推荐阅读
- google-cloud-platform - 如何在名称服务器为 8.8.8.8 和 8.8.4.4 的 GCP 虚拟机中永久设置 resolv.conf?
- ios - AVPlayerViewController 不显示字幕控件
- python - (顺便说一句,没有错误)为什么我的清除命令不起作用?
- python - 如何使用 CMake 构建 Python 扩展模块?
- bash - 在 ubuntu 上的 bash 中运行循环,预期为 1,2,3,...n 但得到 {0..10}
- python - Firebase 实时数据库添加/删除/更新/检索数据
- imagemagick - 使用缺失文件创建固定大小的图像蒙太奇
- android - 以编程方式在 Android 11 上启用 USB 网络共享
- xamarin.forms - 为标签页标签使用字体真棒图标
- javascript - 使用 Javascript 从段落中删除单词