【问题标题】:obsolete enum member who is stored in Database存储在数据库中的过时枚举成员
【发布时间】:2018-06-13 07:45:45
【问题描述】:

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

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

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

迁移?

【问题讨论】:

  • 我会将其标记为已过时,并向您的应用程序添加一些逻辑,强制用户将值更改为非过时值。除非您知道新值必须是什么,否则您可以直接迁移。
  • 感谢您的回答。我认为迁移是解决我们问题的唯一方法

标签: .net database entity-framework enums


【解决方案1】:

最佳做法是遵循以下步骤:

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

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

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

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

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

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

【讨论】:

  • 谢谢,这是我阅读需求时的第一个想法。我认为此属性首先是对开发人员的技术支持,您也应该在描述后使用它。由于只有我们使用代码,没有其他开发人员,我想直接删除该值。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多