来自现有表的NHibernate中的枚举

时间:2010-12-03 14:07:35

标签: c# nhibernate hibernate enums nhibernate-mapping

我的架构设计中有很多表(遗留,无法更改),模式为:

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中添加/删除内容时保持此枚举...

1 个答案:

答案 0 :(得分:1)

C#枚举只是一种设计时的便利,可以使代码更易于读写。它们只是编译为整数(或任何适当的原始类型)。

要让NHibernate(或任何其他ORM)来管理它们,您必须将它集成到IDE中,并且Visual Studio必须在编辑代码时与它进行交互。这可能是有用的,但我怀疑你必须有很多枚举,这些枚举经常变化,因为它真的值得。

我所知道的NHibernate没有类似的插件,但您可以使用代码生成器使您的枚举与数据库表保持同步(例如,Text Template Transformation Toolkit - 又称“T4”模板“ - 随Visual Studio一起提供。”