NHibernate 中的映射表枚举
Posted
技术标签:
【中文标题】NHibernate 中的映射表枚举【英文标题】:Mapping Table Enums in NHibernate 【发布时间】:2009-05-31 02:00:44 【问题描述】:我目前正在构建一个基于旧数据库的新应用。在应用程序中,有许多具有以下格式的“列表”表:
table listLanguages
PrimaryId bigint;
Item varchar(30);
...有一些像这样的示例条目:
PrimaryId Item
1 English
2 French
3 Spanish
...
它们用于填充 Web 表单中的下拉列表,以执行诸如编辑客户详细信息之类的操作。当它们保存在客户记录中时,使用的是完整的字符串值,而不是 ID。我必须保持这种行为。
我的问题是:使用 NHibernate 在我的域模型中映射这些的最佳方法是什么?
我无法更改数据库的结构,并且有很多列表(我会说大约 40 个)。
【问题讨论】:
【参考方案1】:这是我在一个项目中所做的: 我为这些表创建了一个基类,并为从该基类继承的每个表创建了一个子类,然后我为每个表创建了单独的映射文件。
虽然我认为可以有一些更复杂的解决方案,例如使用 IInterceptor 拦截负载行为或在运行时使用配置类添加一些映射文件。
【讨论】:
是的,我想过,但那是一堆映射...虽然我猜映射会很简单。 你是对的,但这就是 NHibernate 的工作方式,你应该为你的类型提供映射:)。【参考方案2】:我通常使用代码生成从相关的数据库表中创建 C# 枚举:
public enum Language
NoneSpecified = 0,
English = 1,
French = 2,
Spanish = 3,
...
看看 T4 模板代码生成,内置于 Visual Studio 2005 及以后。
【讨论】:
不幸的是,这不是一个选项,因为用户可以通过网络界面将自己的项目添加到列表中。以上是关于NHibernate 中的映射表枚举的主要内容,如果未能解决你的问题,请参考以下文章
使用 Fluent NHibernate 和 NHibernate 3 将枚举映射为 Int