Автоматически создавать Enum на основе значений в таблице поиска в базе данных? - PullRequest
104 голосов
/ 07 апреля 2009

Как автоматически создать перечисление и впоследствии использовать его значения в C # на основе значений в таблице поиска в базе данных (с использованием уровня данных корпоративной библиотеки)?

Например, если я добавлю новое значение поиска в базу данных, мне не нужно будет вручную добавлять в код дополнительное объявление статического значения перечисления - я бы хотел синхронизировать перечисление с базой данных.

Есть ли такая вещь, как эта?


Я не хочу создавать код, сгенерированный статическим перечислением (согласно Код проекта статья Генератор кода перечисления - автоматическое создание кода перечисления из таблиц поиска базы данных ) и предпочел бы, чтобы он был полностью автоматическим.

Ответы [ 14 ]

0 голосов
/ 20 июля 2017

Один из способов сохранить перечисления и одновременно создать динамический список значений - это использовать перечисления, которые у вас есть в настоящее время, с динамически создаваемым словарем.

Поскольку большинство перечислений используются в том контексте, в котором они определены для использования, и «динамические перечисления» будут поддерживаться динамическими процессами, вы можете различить 2.

Первым шагом является создание таблицы / коллекции, в которой хранятся идентификаторы и ссылки для динамических записей. В таблице вы получите автоинкремент, значительно превышающий максимальное значение Enum.

Теперь начинается часть ваших динамических Enums, я предполагаю, что вы будете использовать Enums для создания набора условий, которые применяют набор правил, некоторые из них генерируются динамически.

Get integer from database
If Integer is in Enum -> create Enum -> then run Enum parts
If Integer is not a Enum -> create Dictionary from Table -> then run Dictionary parts.
0 голосов
/ 12 октября 2009

Использование динамических перечислений плохо независимо от того, каким образом. Вам придется столкнуться с проблемой «дублирования» данных, чтобы обеспечить ясный и простой код, который легко поддерживать в будущем.

Если вы начнете внедрять автоматически сгенерированные библиотеки, вы наверняка вызовете большую путаницу у будущих разработчиков, которым придется обновлять ваш код, чем просто кодирование enum в соответствующем объекте класса.

Другие приведенные примеры звучат красиво и увлекательно, но подумайте о дополнительных затратах на обслуживание кода и о том, что вы получите от него. Кроме того, эти значения будут меняться так часто?

0 голосов
/ 10 сентября 2009

Я не думаю, что есть хороший способ делать то, что вы хотите. И если вы думаете об этом, я не думаю, что это то, что вы действительно хотите.

Если у вас будет динамическое перечисление, это также означает, что вы должны передать ему динамическое значение, когда вы ссылаетесь на него. Может быть, с большим количеством магии вы могли бы получить что-то вроде IntelliSense , которое позаботится об этом и сгенерирует для вас перечисление в файле DLL. Но рассмотрите объем работы, который потребуется, насколько неэффективным будет доступ к базе данных для получения информации IntelliSense, а также кошмар версии, управляющей сгенерированным файлом DLL.

Если вы действительно не хотите вручную добавлять значения перечислений (вам все равно придется добавлять их в базу данных), используйте вместо этого инструмент генерации кода, например T4 шаблоны. Щелкните правой кнопкой мыши и запустите, и вы получите статически определенное перечисление в коде, и вы получите все преимущества использования перечислений.

0 голосов
/ 25 июня 2009

Вы можете использовать CodeSmith, чтобы сгенерировать что-то вроде этого:

http://www.csharping.com/PermaLink,guid,cef1b637-7d37-4691-8e49-138cbf1d51e9.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...