nhibernate映射枚举对(键值)

nhibernate映射枚举对(键值),nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,在我们的系统中,我们使用nhibernate将对象映射到数据库中。在我们的一个物体上 我们有一个字段,它表示为enum(带有键和值的enum,f.e public enum Status { Draft = 0, Archived = 1, Imported = 2 } ) 所以,在我们的应用程序中,我们面临着按enum表示的字段对对象进行排序的问题:排序不是按enum的键进行的,而是按值进行的。为了解决这个问题,我们在数据

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

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

所以,在我们的应用程序中,我们面临着按enum表示的字段对对象进行排序的问题:排序不是按enum的键进行的,而是按值进行的。为了解决这个问题,我们在数据库中为enum的字符串键创建了addative字段,并在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配置将enum的键和值映射到数据库列(Status和StatusName列)?

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

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

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

网上有几个例子,例如:或