在这个问题中,我发现枚举更改不是由实体框架迁移处理的。实际上,枚举更改甚至不会导致模型更改错误,因此您可以随意更改枚举而无需控制。
导致不同 int 值的枚举更改(例如顺序更改或删除)可以有效地使数据库数据无效,因为现在存储的整数的含义是错误的。
为了使迁移工作,您必须手动执行更改更改的枚举值的自定义 SQL。
问题是,开发人员必须记住这样做,如果有疏忽,则可能会发生有效的数据损坏。
有人如何对此进行检查?如果枚举发生更改,是否有可能抛出模型更改错误或类似的东西?
在这个问题中,我发现枚举更改不是由实体框架迁移处理的。实际上,枚举更改甚至不会导致模型更改错误,因此您可以随意更改枚举而无需控制。
导致不同 int 值的枚举更改(例如顺序更改或删除)可以有效地使数据库数据无效,因为现在存储的整数的含义是错误的。
为了使迁移工作,您必须手动执行更改更改的枚举值的自定义 SQL。
问题是,开发人员必须记住这样做,如果有疏忽,则可能会发生有效的数据损坏。
有人如何对此进行检查?如果枚举发生更改,是否有可能抛出模型更改错误或类似的东西?
当您将枚举移到另一个项目以用作库时,.Net 中存在类似的枚举问题:
http://bytes.com/topic/c-sharp/answers/271483-q-why-casting-enum#post1086722
试试看 - 枚举通常非常脆弱。答案是始终为您的枚举分配一个明确的值,以防止这两个问题。这使您仍然可以利用它们的核心价值(使用清晰的名称而不是幻数以及在方法参数中键入安全性的更多内容),但会阻止您悄悄地破坏一切。
您可以通过代码审查或通过正则表达式的提交后挂钩来强制执行此策略。