2009-03-03 67 views
1

NHibernate映射中獲得YesNo布爾類型的反向行爲的最佳方式是什麼?NHibernate的數據類型 - NoYes布爾

我想'Y'表示虛假,'N'表示真實。

是否有NoYes類型?你寫一個自定義類型?真的很簡單嗎?

需要反轉布爾值的這個問題至少存在於超過40個表的一個字段上。 嘗試適應遺留數據庫。

+2

如果「是」的意思是「不」,那麼這一定是來自地獄的遺留數據庫。 – 2009-03-03 19:14:09

回答

5

我發現通過實現自定義類型可以輕鬆實現處理遺留數據庫中奇怪的數據格式。例如,我最近做了一個簡單的用戶類型來將DateTime映射到表格yyyyMMdd上的8位數字,這恰好是日期存儲在我必須使用的DB2轉儲中的方式。

洛杉磯技術有一個實施IUserType的例子,你可以用它來解決你的問題:Mapping Strings to Booleans Using NHibernate's IUserType

1

我有一個類似的問題。 我發現的更簡單的解決方案是從NHibernate擴展CharBooelanType並在映射上使用新類型。 這將是這樣的:

using NHibernate.Type; 
using NHibernate.SqlTypes; 

namespace MyAssembly.MyNamespace 
{ 
    public class NewBoolType : CharBooleanType 
    { 
     public NewBoolType() 
      : base(new AnsiStringFixedLengthSqlType(1)) { } 

     protected override string TrueString 
     { 
      get { return "N"; } 
     } 

     protected override string FalseString 
     { 
      get { return "Y"; } 
     } 

     public override string Name 
     { 
      get { return "inverted_bool"; } 
     } 
    } 
} 

和映射會是這樣的:

<property name="MyProperty" column="MyColumn" type="MyAssembly.MyNamespace.NewBoolType, MyAssembly" /> 
相關問題