2010-02-16 190 views
1

我有一個數據庫表,其中包括一個兩位字段:IsEvenSideIsOddSide。我想這映射到下列枚舉:NHibernate - 將一個屬性映射到兩個或多個字段?

[Flags] enum SideOfStreet { None, Even, Odd } 

我已經在過去所做IUserType的,但我不知道如何映射到多個數據庫字段。

這怎麼辦?

P.S .:我使用的是流利的NHibernate,但我也可以使用hbm解決方案。我只想弄清楚如何轉換它。

回答

1

地圖數據庫字段在你的類只讀屬性:

Map(x => x.IsEvenSide); 
Map(x => x.IsOddSide); 

並通過公共屬性來控制他們:

public class Example 
{ 

    public IsEvenSide { get; private set; } 
    public IsOddSide { get; private set; } 

    public SideOfStreet SideOfStreet 
    { 
     get 
     { 
      var side = SideOfStreet.None; 
      if (IsEvenSide) { side |= SideOfStreet.Even; } 
      if (IsOddSide) { side |= SideOfStreet.Odd; } 
      return side; 
     } 
     set 
     { 
      IsEvenSide = (value & SideOfStreet.Even) == SideOfStreet.Even; 
      IsOddSide = (value & SideOfStreet.Odd) == SideOfStreet.Odd; 
     } 
    } 
} 
[修訂版的標誌枚舉工作]

如果您不想爲IsEvenSide和IsOddSide公開getter,您可以將它們標記爲private,並使用Reveal:

Map(Reveal.Property<Example>("IsEvenSide")); 
+0

哎呀,糾正了這個問題。我從內存中輸入我的問題 - 真正的系統沒有Both選項並且使用標誌。 –

相關問題