NHibernate を使用して UInt32 型を sql-server int 型にマップする最良の方法は何ですか?
値は画像の幅/高さであるため、ここでは負の値は意味がありません。
しかし、NHibenate は割り当てられていない int をサポートしていないため、int を使用する必要があるかもしれません。
NHibernate を使用して UInt32 型を sql-server int 型にマップする最良の方法は何ですか?
値は画像の幅/高さであるため、ここでは負の値は意味がありません。
しかし、NHibenate は割り当てられていない int をサポートしていないため、int を使用する必要があるかもしれません。
IUserType を使用して列をマップできます。
<class name="UnsignedCounter">
<property name="Count" type="mynamespace.UInt32Type, mydll" />
</class>
UInt32?
そして、とをマップする IUserType UInt32
。
class UInt32Type : IUserType
{
public object NullSafeGet( System.Data.IDataReader rs, string[] names, object owner )
{
int? i = (int?) NHibernateUtil.Int32.NullSafeGet( rs, names[0] );
return (UInt32?) i;
}
public void NullSafeSet( System.Data.IDbCommand cmd, object value, int index )
{
UInt32? u = (UInt32?) value;
int? i = (Int32?) u;
NHibernateUtil.Int32.NullSafeSet( cmd, i, index );
}
public Type ReturnedType
{
get { return typeof(Nullable<UInt32>); }
}
public SqlType[] SqlTypes
{
get { return new SqlType[] { SqlTypeFactory.Int32 }; }
}
public object Assemble( object cached, object owner )
{
return cached;
}
public object DeepCopy( object value )
{
return value;
}
public object Disassemble( object value )
{
return value;
}
public int GetHashCode( object x )
{
return x.GetHashCode();
}
public bool IsMutable
{
get { return false; }
}
public object Replace( object original, object target, object owner )
{
return original;
}
public new bool Equals( object x, object y )
{
return x != null && x.Equals( y );
}
}
1年遅れましたが、同じ質問をして別の答えを見つけたので、追加すると思いました。もっと簡単に思えます。まだ発見されていない欠陥があるのかもしれません。
NHibernate 3.0、Visual Studio 2005、および .NET 2.0.x を使用しています。
hbm.xml に type 属性を含めなくても、.NET の UInt32 クラスを使用できることがわかりました。
// .NET 2.0 Property syntax
public class MyClass
{
// NHibernate needs public virtual properties.
private UInt32 _Id;
public virtual UInt32 Id { get { return (_Id); } set { _Id = value; } }
}
// hbml.xml
<class name ="MyClass">
<id name="Id" />
</class>
// SQL to create the table
CREATE TABLE `PumpConnection` (
`Id` **INT**(10) **UNSIGNED** NOT NULL AUTO_INCREMENT,
)