我的架构设计中有很多表(遗留,无法更改),模式为:
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做到这一点,如果是这样,映射会是什么样子?如果没有,最好的近似值是什么?我能想到的唯一方法是在与类型ID匹配的代码中构造一个(非持久的)枚举类型:
enum WidgetType { Foo=3, Bar=4 };
但是,我不想在DB中添加/删除内容时保持此枚举...
答案 0 :(得分:1)
C#枚举只是一种设计时的便利,可以使代码更易于读写。它们只是编译为整数(或任何适当的原始类型)。
要让NHibernate(或任何其他ORM)来管理它们,您必须将它集成到IDE中,并且Visual Studio必须在编辑代码时与它进行交互。这可能是有用的,但我怀疑你必须有很多枚举,这些枚举经常变化,因为它真的值得。
我所知道的NHibernate没有类似的插件,但您可以使用代码生成器使您的枚举与数据库表保持同步(例如,Text Template Transformation Toolkit - 又称“T4”模板“ - 随Visual Studio一起提供。”