Orm 如何使用Fluent nHibernate将UInt64字段映射到十进制(20,0)列?
我正在使用Orm 如何使用Fluent nHibernate将UInt64字段映射到十进制(20,0)列?,orm,fluent-nhibernate,nhibernate-mapping,sql-server-2008-r2,Orm,Fluent Nhibernate,Nhibernate Mapping,Sql Server 2008 R2,我正在使用 MS SQL Server 2008R2 Fluent nHibernate 1.3 nHibernate 3.2 我的域中有一个UInt64字段,可能会占用整个UInt64范围。由于MS-SQL不支持无符号整数,我们决定将其存储在十进制(20,0)列中(至少目前是这样)。我曾尝试在映射中的该列上使用CustomSqlType(“decimal(20,0)”),但当我尝试访问表示数据库不支持UInt64的字段时,仍然会遇到错误 如何使用Fluent nHibernate将UInt
- MS SQL Server 2008R2
- Fluent nHibernate 1.3
- nHibernate 3.2
十进制(20,0)
列中(至少目前是这样)。我曾尝试在映射中的该列上使用CustomSqlType(“decimal(20,0)”)
,但当我尝试访问表示数据库不支持UInt64的字段时,仍然会遇到错误
如何使用Fluent nHibernate将UInt64字段映射到十进制(20,0)列
我试过了
- CustomSqlType(“十进制”).精度(20).刻度(0)
- CustomSqlType(“十进制(20,0)”)
- 自定义类型() 以及CustomSqlType和CustomType的排列
.CustomSqlType("decimal").Precision(20).Scale(0)
.CustomType<NHibernate.Type.DoubleType>()
.CustomSqlType(“十进制”).精度(20).刻度(0)
.CustomType()
我会选择用户类型
class UInt64UserType : ImmutableUserType
{
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
var value = NHibernateUtil.Decimal.NullSafeGet(rs, names[0]);
return (value == null) ? 0 : Convert.ToUInt64(value);
}
public void NullSafeSet(IDbCommand cmd, object value, int index)
{
decimal d = Convert.ToDecimal(value);
NHibernateUtil.Decimal.NullSafeSet(cmd, d, index);
}
public Type ReturnedType
{
get { return typeof(UInt64); }
}
public SqlType[] SqlTypes
{
get { return new[] { SqlTypeFactory.Decimal }; }
}
}
.CustomType<UInt64UserType>()
ImmutableUserType在哪个dll或命名空间中?我在NHibernate中看不到它。用户类型和我的谷歌技能让我失望。
public abstract class ImmutableUserType : UserTypeBase
{
public override bool IsMutable
{
get { return false; }
}
public override object DeepCopy(object value)
{
return value;
}
public override object Replace(object original, object target, object owner)
{
return original;
}
public override object Assemble(object cached, object owner)
{
return cached;
}
public override object Disassemble(object value)
{
return value;
}
}
public abstract class UserTypeBase : IUserType
{
public new virtual bool Equals(object x, object y)
{
return EqualsHelper.Equals(x, y);
}
public virtual int GetHashCode(object x)
{
return (x == null) ? 0 : x.GetHashCode();
}
public abstract object Assemble(object cached, object owner);
public abstract object DeepCopy(object value);
public abstract object Disassemble(object value);
public abstract bool IsMutable { get; }
public abstract object NullSafeGet(System.Data.IDataReader rs, string[] names, object owner);
public abstract void NullSafeSet(System.Data.IDbCommand cmd, object value, int index);
public abstract object Replace(object original, object target, object owner);
public abstract Type ReturnedType { get; }
public abstract SqlType[] SqlTypes { get; }
}