1

NHibernate マッピングで YesNo ブール型の逆の動作を取得する最良の方法は何ですか?

「Y」は偽を意味し、「N」は真を意味します。

NoYesタイプはありますか?カスタムタイプを書きますか?本当に簡単なこと?

ブール値を逆にする必要があるというこの問題は、40 以上のテーブルの少なくとも 1 つのフィールドに存在します。レガシーデータベースに適応しようとしています。

4

2 に答える 2

5

カスタムタイプを実装することで、レガシーデータベースの奇妙なデータ形式を簡単に処理できることがわかりました。たとえば、私は最近DateTime、フォーム上の 8 桁の数字にマップする単純なユーザー タイプを作成しましyyyyMMddた。これは、DB2 ダンプに日付を保存する方法でした。

Los Techies には、IUserType問題を解決するために使用できる実装の例があります: Mapping Strings to Booleans Using NHibernate's IUserType

于 2009-03-03T19:17:22.383 に答える
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" />
于 2012-02-13T13:05:26.210 に答える