Трудно понять, как любой компилятор может это поддерживать.
Предполагается, что весь смысл перечисления в том, что вы получаете проверку правильности ваших значений во время компиляции. Скажем, если вы объявляете enum «enum MyStatusCode {FOO, BAR, PLUGH}», то в вашем коде, если вы пишете «MyStatusCode.FOO», все хорошо, но если вы пишете «MyStatusCode.ZORK», вы получаете ошибка времени Это защищает вас от неверного написания значений или путаницы в значениях одного перечисления по сравнению с другим. (У меня только недавно возникла проблема, когда программист случайно назначил метод доставки для типа транзакции, таким образом, волшебным образом превратив продажу в корректировку запасов, когда он намеревался изменить доставку на дом на самовывоз.)
Но если ваши значения определяются динамически во время выполнения, как может компилятор сделать это? Если вы написали MyStatusCode.ZORK в приведенном выше примере, компилятор не сможет узнать, будет ли это значение в базе данных во время выполнения или нет. Даже если вы представляете компилятор достаточно умным, чтобы выяснить, как заполняется перечисление, и проверить базу данных, чтобы увидеть, присутствует ли это значение в соответствующей таблице СЕЙЧАС, он не сможет узнать, будет ли он там, когда вы на самом деле запустите .
Короче говоря, то, что вы хотите, сильно отличается от перечисления.