2010-03-02 57 views
6

如何構建針對NHibernate中的自定義IUserType字段的查詢?在NHibernate中構造針對IUserType的查詢

更具體地說: 我正在做一個棕色領域的應用程序。我在數據庫中有一個名爲「State」的字段,其中包含一個代表某個對象處於什麼狀態的字符。

在我的代碼中,我希望將它表示爲一個枚舉,因此我創建了一個具有值的枚舉爲每個狀態,並創建一個IUserType從數據庫的char值轉換爲我的枚舉並返回以選擇&更新。

我想建立一個查詢,看起來像這樣:

session.CreateCriteria<MyType>().Add(Expression.Eq("State", StateEnum.Complete)) 

然而,查詢拋出異常:

could not resolve property: State of: MyNamespace.MyType 

大概是因爲NHibernate的不知道如何做一個選擇針對給定StateEnum類型的DB字段字段。

+0

請發佈您的地圖 – 2010-03-04 01:50:52

+0

錯誤消息聽起來像你還沒有映射屬性MyType.State – 2010-03-08 08:07:33

回答

6

您的類和映射應該是這樣的:

class MyType 
{ 
    public virtual StateEnum State { get; set; } 
} 

<class name="MyType"> 
    <property name="State" type="MyNamespace.MyEnumUserType, MyDll" /> 
</class> 

NHibernate的已建成3映射器,枚舉:

  • PersistentEnumType映射到一個int的列,並且不宣在映射中。
  • EnumStringType映射到varchar列。值是枚舉的ToString()值。
  • EnumCharType映射到char列。這些值是(char) (int) enumvalue的結果。
+0

原來是在我的配置錯誤,但你確實有它的權利 – hackerhasid 2010-03-08 19:22:51