8

この質問では、列挙型の変更がEntityFrameworkの移行によって処理されないことを発見しました。実際、列挙型を変更してもモデル変更エラーは発生しないため、コントロールなしで列挙型を自由に変更できます。

順序の変更や削除など、異なるint値をもたらす列挙型の変更は、格納されている整数の意味が間違っているため、データベースデータを事実上無効にする可能性があります。

移行を機能させるには、変更された列挙値を変更するカスタムSQLを手動で実行する必要があります。

問題は、開発者がこれを行うことを忘れないようにする必要があることです。見落としがあった場合、効果的なデータ破損が発生する可能性があります。

誰かがこれに対してどのようにチェックを行うことができますか?列挙型が変更された場合に、モデル変更エラーなどをスローすることは可能ですか?

4

1 に答える 1

2

ライブラリとして使用する別のプロジェクトに列挙型を移動すると、列挙型に関する同様の問題が .Net に存在します。

http://bytes.com/topic/c-sharp/answers/271483-q-why-casting-enum#post1086722

試してみてください - 一般に列挙型は驚くほど脆弱です。答えは、両方の問題を防ぐために、列挙型に常に明示的な値を割り当てることです。これにより、コア値 (マジック ナンバーの代わりに明確な名前を使用し、メソッド引数で型の安全性をもう少し高める) を引き続き活用できますが、静かにすべてを壊すことはできなくなります。

このポリシーは、正規表現によるコード レビューまたはコミット後のフックで適用できます。

于 2013-01-25T16:08:02.017 に答える