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

nhibernate 映射枚举对(键 - 值)

使用流利的 nhibernate 映射枚举

在 NHibernate 中使用字符串枚举 - GetValue 永远不会被解雇

流畅的 nHibernate 映射问题

Nhibernate 中的父子映射