Я использую перечисления для значений базы данных, которые никогда не должны создаваться или изменяться пользователем, и если есть специальная логика, основанная на значении. Валюты не являются хорошим примером, если вы не указали каждую валюту в своем перечислении и не согласились с тем, что вам придется перекомпилировать свое приложение, если появится новая валюта или она устарела. OrderStatus может быть хорошим примером, если в вашей системе есть логика, основанная на OrderStatus. Несмотря на это, следует отметить, что если вы создаете перечисление для представления значения базы данных, то приложение должно быть перекомпилировано, если необходимо создать новое значение в этой таблице, и поэтому эту практику следует использовать с большой осторожностью.
В ситуациях, когда я собираюсь имитировать значение базы данных с помощью перечисления, я использую имя перечисляемого значения в качестве первичного ключа таблицы и в качестве значения, передаваемого во внешний ключ. То есть, когда я сохраняю в базу данных, я собираюсь передать myEnumVal.ToString()
. У меня есть несколько причин для этого. Во-первых, требуется, чтобы добавление значения было более осознанным. Если бы я использовал числовое значение в качестве первичного ключа, это означало бы, что я использую суррогатный ключ и что дополнительные значения могут быть легко добавлены. Когда другие разработчики видят столбец, используя имя в качестве первичного ключа, есть большая вероятность, что они будут думать, что значение не является произвольным. Во-вторых, это значительно облегчает чтение кода базы данных. Вы получаете запросы типа Where OrderStatus = 'Active'
вместо Where OrderStatus = 1
.