Перечисления в NHibernate из существующей таблицы - PullRequest
0 голосов
/ 03 декабря 2010

У меня есть много таблиц в моей схеме (устаревшие, не могут быть изменены) с шаблоном:

Widget
-----------
WIDGET_ID (int, PK)
WIDGET_TYPE_ID (int, FK)

WidgetType
-----------
WIDGET_TYPE_ID (int, PK)
WIDGET_TYPE_NAME (varchar)

пример записей виджетов:

WIDGET_ID | WIDGET_TYPE_ID (FK)
1           3
2           4

пример записей WidgetType:

WIDGET_TYPE_ID | WIDGET_TYPE_NAME 
3                "Foo"
4                "Bar"

В основном многие таблицы в моей БД имеют соответствующие таблицы «Тип», связанные с ними, которые я хотел бы построить как перечисления в объектной модели, то есть:

Widget newWidget = new Widget();
newWidget.WidgetType = WidgetType.Foo;

Есть ли ЛЮБОЙ способ сделать это с помощью NHibernate, если да, то как будет выглядеть отображение? Если нет, то какое наилучшее приближение? Единственный способ, которым я мог придумать, - это создать (не сохраняемый) тип перечисления в коде, который соответствует идентификаторам типов:

enum WidgetType { Foo=3, Bar=4 };

Но я бы предпочел не поддерживать это перечисление, так как вещи добавляются / удаляются из БД ...

1 Ответ

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

Перечисления C # - это просто удобство времени разработки, которое облегчает чтение и запись кода. Они просто компилируются в целые числа (или любой другой тип примитива).

Чтобы заставить NHibernate (или любой другой ORM) управлять ими, вам нужно интегрировать его в IDE, и Visual Studio должна взаимодействовать с ним во время редактирования кода . Это может быть полезно, но я подозреваю, что у вас должно быть много перечислений, которые меняются довольно часто, чтобы это действительно стоило.

Нет такой надстройки для NHibernate, о которой я знаю, но вы можете использовать генератор кода для синхронизации ваших перечислений с таблицами базы данных (например, Text Template Transformation Toolkit - он же "Шаблоны Т4" - поставляется с Visual Studio).

...