存储在数据库中的过时枚举成员

时间:2018-06-13 07:45:46

标签: .net database entity-framework enums

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

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

从技术上讲,我想在代码中删除这个值,但你会用旧数据做什么?

迁移?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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