首页 > 解决方案 > 存储在数据库中的过时枚举成员

问题描述

我在 EF6 的实体中有一个枚举,并且在保存枚举时它作为一个字节存储在数据库中。

现在我想将 Enum 的一个值标记为过时,但仍然会有数据使用这个值。它只是没有在代码中使用。

从技术上讲,我想在代码中删除这个值,但是你会如何处理旧数据呢?

迁移?

标签: .netdatabaseentity-frameworkenums

解决方案


好的做法是遵循以下步骤:

  • 数据迁移:用正确的值替换数据库中的过时值。
  • 清理代码:删除枚举值,因为不再需要它。

如果由于旧值仍然保留在数据库中而无法进行数据迁移,那么我将按照以下步骤操作:

  • 从枚举中设置字段的每个属性设置器或方法都必须添加一些防御性代码。InvalidOperationException使用过时的枚举值进行设置时,您会抛出带有显式消息的异常。
  • 在枚举定义中,我将添加一个 XML 注释,以<remark>帮助开发人员了解正在发生的事情。
  • 可选步骤:进一步添加自定义代码分析器以跟踪该值的使用。

注意我没有用[Obsolete]属性装饰枚举值,因为这个属性意味着两件事:

  • 该代码在版本 X 中已过时。
  • 该代码将在 X 之后的版本中删除:版本 Y。

这两件事让使用版本 X 的开发人员清理他们的实际代码库(删除所有过时的枚举值的使用)并为版本 Y 做好准备(不需要任何更改,因为所有工作都在使用版本 X 时完成)。您不能使用[Obsolete]属性,因为您说旧数据仍将存在于数据库中,因此您可能需要在某处显示,而您没有遵循我所说的关于[Obsolete]属性的两件事。


推荐阅读