gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:10 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com