【问题标题】:Mapping Table Enums in NHibernateNHibernate 中的映射表枚举
【发布时间】: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 个)。

【问题讨论】:

    标签: c# .net nhibernate domain-driven-design orm


    【解决方案1】:

    这是我在一个项目中所做的: 我为这些表创建了一个基类,并为从该基类继承的每个表创建了一个子类,然后我为每个表创建了单独的映射文件。

    虽然我认为可以有一些更复杂的解决方案,例如使用 IInterceptor 拦截负载行为或在运行时使用配置类添加一些映射文件。

    【讨论】:

    • 是的,我想过,但那是一堆映射...虽然我猜映射会很简单。
    • 你是对的,但这就是 NHibernate 的工作方式,你应该为你的类型提供映射:)。
    【解决方案2】:

    我通常使用代码生成从相关的数据库表中创建 C# 枚举:

    public enum Language
    {
        NoneSpecified = 0,
        English       = 1,
        French        = 2,
        Spanish       = 3,
        ... 
    }
    

    看看 T4 模板代码生成,内置于 Visual Studio 2005 及以后。

    【讨论】:

    • 不幸的是,这不是一个选项,因为用户可以通过网络界面将自己的项目添加到列表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多