0

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

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

)

因此,在我们的应用程序中,我们遇到了按枚举表示的字段对对象进行排序的问题:排序不是按枚举的键,而是按值。为了解决这个问题,我们在数据库中为枚举的字符串键创建了附加字段,并在 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 字段)和枚举值(Status 字段)的值,它不保存。

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

4

1 回答 1

0

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

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

要实现它,您需要编写一个复合自定义类型,它能够将一个属性的值存储到多个列中。

网上有几个例子,例如。这里这里

于 2013-03-05T13:35:45.147 回答