質問

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

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

NoYesタイプはありますか?カスタムタイプを作成しますか?本当に簡単なことですか?

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

役に立ちましたか?

解決

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

Los Techiesには、問題の解決に使用できる IUserType の実装例があります: NHibernateのIUserTypeを使用して文字列をブール値にマッピング

他のヒント

同様の問題がありました。 私が見つけた簡単な解決策は、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" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top