NHibernate DataTypes-NoYesブール
-
03-07-2019 - |
質問
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" />
所属していません StackOverflow