Перечисление C # с использованием значений в таблице Sql Server - PullRequest
3 голосов
/ 01 декабря 2010

На данный момент у меня есть таблица SQL Server 2005, которая выглядит примерно так:

ID | name  | desc
----------------------
1  | ONE   | Value One
3  | THREE | Value Three
5  | FIVE  | Value Five

Эта таблица соответствует перечислению в C #, которое выглядит следующим образом:

enum MsgTypes{
  <summary>Value One</summary>
  ONE = 1,
  <summary>Value Three</summary>
  THREE = 3,
  <summary>Value Five</summary>
  FIVE = 5
}

Итак, мой вопрос заключается в следующем: существует ли хороший способ связать перечисление с таблицей SQL, чтобы любые изменения / дополнения к значениям в таблице не нужно было вносить вручную в коде c #?

Ответы [ 5 ]

11 голосов
/ 01 декабря 2010

Если вы хотите, чтобы оно было несколько динамичным, зачем начинать с перечисления? Просто получите данные из таблицы при запуске приложения и запомните их, скажем, в Dictionary<int, string>. Вы всегда можете инкапсулировать значение в свой собственный тип значения, который устанавливает диапазон, если хотите.

В качестве альтернативы, если вы не возражаете против перекомпиляции, вы можете получить его в build time и автоматически сгенерировать исходный код enum.

3 голосов
/ 01 декабря 2010

Мне недавно пришлось подумать о чем-то похожем ( рефакторинг перечисления ) - в основном я подумал об использовании словаря <A, B> для хранения значений перечисления. Вы можете динамически загружаться из таблицызаполнить словарь, если вы хотите.

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

1 голос
/ 01 декабря 2010

Для меня это зависит от того, как часто меняются таблицы поиска enums / DB.В нашей системе примерно полдюжины перечислений / поисков, подобных этому, и я не возражаю перекомпилировать, чтобы добавить опцию emum + строку DB, потому что:

  1. Это случается не очень часто - вероятно,За последний год я уже дважды вспоминал
  2. Как правило, новая опция окружает новую опцию, поэтому кодирование все равно необходимо.
0 голосов
/ 01 декабря 2010

Я согласен с тем, что предлагает Джон, но тогда, если вы предпочитаете иметь свой список Enum в БД и хотите использовать их в своем коде, вы можете использовать функцию TypeTable из nHydrate для вашего проекта.

0 голосов
/ 01 декабря 2010

Другая альтернатива - реализация пользовательского объекта со свойствами ID, Name и Desc, который инкапсулирует таблицу базы данных.

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