我在 EF6 的实体中有一个枚举,在保存枚举时它作为一个字节存储在数据库中。
现在我想将 Enum 的一个值标记为 Obsolete,但是仍然会有数据使用这个值。它只是没有在代码中使用。
从技术上讲,我想在代码中删除这个值,但是您会如何处理旧数据?
迁移?
最佳答案
好的做法是遵循以下步骤:
- 数据迁移:将过时的值替换为正确的值到您的数据库中。
- 清理代码:删除枚举值,因为不再需要它。
如果因为数据库中还保留着旧值而无法完成数据迁移,那么我将按照以下步骤操作:
- 从您的枚举中设置字段的每个属性 setter 或方法都必须添加一些防御代码。使用过时的枚举值进行设置时会抛出异常
InvalidOperationException
带有明确的消息。 - 在枚举定义中,我将放置一个带有
<remark>
的 XML 注释这将有助于开发人员了解正在发生的事情。 - 可选步骤:进一步添加自定义 code analyzer跟踪该值的使用情况。
注意我没有用 [Obsolete]
修饰枚举值属性,因为这个属性意味着两件事:
- 代码在版本 X 中已过时。
- 代码将在X之后的版本中删除:版本Y。
这两件事让使用版本 X 的开发人员可以清理他们的实际代码库(删除所有对过时枚举值的使用)并为版本 Y 做好准备(不需要任何更改,因为所有工作都在使用版本 X 时完成).你不能使用 [Obsolete]
属性,因为您说过旧数据仍将存在于数据库中,因此您可能需要在某处显示并且您没有遵循我所说的关于 [Obsolete]
的两件事属性。
关于.net - 存储在数据库中的过时枚举成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50831715/