在NHibernate映射中获取YesNo Boolean类型的反向行为的最佳方法是什么?
我希望'Y'表示错误,'N'表示正确。
是否有NoYes类型?你写自定义类型?什么东西真的很容易?
这个需要反转布尔值的问题存在于40多个表的至少一个字段上。 试图适应遗留数据库。
答案 0 :(得分:5)
我发现通过实现自定义类型,可以轻松地在遗留数据库中处理奇怪的数据格式。例如,我最近创建了一个简单的用户类型,将DateTime
映射到yyyyMMdd
形式的8位数字,这恰好是日期存储在我必须使用的DB2转储中的方式。 / p>
Los Techies有一个关于实施IUserType
的示例,可用于解决您的问题:Mapping Strings to Booleans Using NHibernate's IUserType。
答案 1 :(得分: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" />