nhibernate映射枚举对(键 - 值)

时间:2013-03-05 06:04:58

标签: nhibernate nhibernate-mapping

在我们的系统中,我们使用nhibernate将对象映射到数据库。在我们的一个对象中 我们有字段,表示为枚举(带键和值的枚举,f.e。

public enum Status
    {
        Draft = 0,
        Archived = 1,
        Imported = 2
    }   

因此,在我们的应用程序中,我们遇到了由enum表示的字段对对象进行排序的问题:排序不是通过枚举的键,而是通过值。为了解决这个问题,我们在数据库中为枚举的字符串键创建了附加字段,并在nhibenate模型文件中进行了更改:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <typedef name="StatusName" class="NHibernate.Type.EnumStringType`1[[Code.Model.Status, Code.Model]], NHibernate" />
...
<property name="Status"  type="StatusName" column="StatusName" not-null="true" />
...

之后,更改排序开始在应用程序中正常工作(记录按枚举键排序),但在数据库中创建新对象后,仅保存值为枚举键(StatusName字段)和枚举值(状态字段),它没有'保存。

有没有办法通过使用nhibernate配置将枚举的键和值映射到数据库列(Status和StatusName列)?

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题。它认为您希望将枚举值的名称及其数值存储在两个不同列的数据库中。

在你这样做之前,请确保你真的想要那样做。这是一种冗余。冗余总是很难保持一致,并且在解决时通常会导致更多问题。

要实现它,您需要编写一个复合custom type,它能够将属性的值存储到多个列。

网络中有几个例子,例如。 herehere