什麼是使用NHibernate映射UInt32類型爲sql-server int類型的最佳方式。NHibernate的 - 如何在數據庫中存儲UInt32
該值是一個圖片的寬度/高度,所以負值在這裏沒有意義。
但也許我應該使用int,因爲NHibenate不支持未分配的整數。
什麼是使用NHibernate映射UInt32類型爲sql-server int類型的最佳方式。NHibernate的 - 如何在數據庫中存儲UInt32
該值是一個圖片的寬度/高度,所以負值在這裏沒有意義。
但也許我應該使用int,因爲NHibenate不支持未分配的整數。
您可以使用IUserType來映射列。
<class name="UnsignedCounter">
<property name="Count" type="mynamespace.UInt32Type, mydll" />
</class>
和映射UInt32?
和UInt32
的IUserType。
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);
}
}
我晚了一年,但因爲我有同樣的問題,發現了不同的答案,我想我會添加它。這似乎更簡單。也許它有一個我還沒有發現的缺陷。
我使用NHibernate 3.0,Visual Studio 2005和.NET 2.0.x.
我發現我可以使用.NET的UInt32類,而不是在hbm.xml中包含type屬性。
// .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,
)
您是否嘗試過使用'sql-type'來使用模式生成? – 2012-07-18 05:12:25
使用'NullSafeSet'從uint Enum類型轉換時出現問題:在這種情況下,無法將值轉換爲可爲null的類型。使用'uint? u = null;如果(值!= null)u =(uint)值;'而不是 – fmuecke 2013-07-02 16:28:17
也等於不正確的工作。如果(object.ReferenceEquals(x,y)) { }返回true,則工作版本可以是「public new bool Equals(object x,object y) { } if(x == null || y == null) { return false; } return(uint)x ==(uint)y; }' – fmuecke 2013-07-03 07:05:12
@fmuecke:在這種情況下,'Equals'將始終接收盒裝值,因此'object.ReferenceEquals'將始終返回false,並且它們永遠不會爲空。 – Groo 2014-10-31 10:28:04