如何在NHibernate中映射枚举以在模式导出上正确创建DB字段?

时间:2009-06-02 20:37:20

标签: nhibernate nhibernate-mapping

我已经看到了几个与使用NHibernate正确映射枚举类型相关的问题。

Jeff Palermo的

This article向我展示了如何通过创建自定义类型来正确地做到这一点。我在开发周期中使用Schema Export来创建我的数据库,但是这个方法会破坏我的导出语句。有没有办法在导出时指定列的类型?

这是我的枚举代码:

public enum OperatorCode
{
    CodeA,
    CodeB,
    CodeC,
    CodeD
}

这是我的自定义类型:

public class OperatorCodeType:EnumStringType
{
    public OperatorCodeType():base(typeof(OperatorCode),20)
    {

    }
}

这是我的映射文件中的属性:

<property name="OperatorCode" column="OperatorCode" type="OperatorCodeType"  />

最后这是我对该属性的类声明:

public virtual OperatorCode OperatorCode { get; set; }

甚至可以这样做吗?

1 个答案:

答案 0 :(得分:1)

我没有对它进行测试,但您可以在属性中使用Column声明来指定sql类型。来自文档的示例:

<property name="Foo" type="String">
    <column name="foo" length="64" not-null="true" sql-type="text"/>
</property>

当然这是一个字符串,但您可能想要使用OperatorCodeType类型,sql-type列作为text或nvarchar或其他任何工作来尝试它。

如果您尝试一下,请告诉我?目前不在我的开发机器附近。