NHibernate-如何在数据库中存储UInt32

NHibernate-如何在数据库中存储UInt32,nhibernate,nhibernate-mapping,uint32,Nhibernate,Nhibernate Mapping,Uint32,使用NHibernate将UInt32类型映射到sql server int类型的最佳方法是什么 该值是一个图片宽度/高度,因此负值在这里没有意义 但也许我应该使用int,因为NHibenate不支持未分配的int。您可以使用IUserType映射列 <class name="UnsignedCounter"> <property name="Count" type="mynamespace.UInt32Type, mydll" /> </class>

使用NHibernate将UInt32类型映射到sql server int类型的最佳方法是什么

该值是一个图片宽度/高度,因此负值在这里没有意义


但也许我应该使用int,因为NHibenate不支持未分配的int。

您可以使用IUserType映射列

<class name="UnsignedCounter">
    <property name="Count" type="mynamespace.UInt32Type, mydll"  />
</class>

可以使用IUserType映射列

<class name="UnsignedCounter">
    <property name="Count" type="mynamespace.UInt32Type, mydll"  />
</class>

我迟到了一年,但因为我有同样的问题,找到了不同的答案,我想我应该加上它。这似乎更简单。也许它有一个我还没有发现的缺陷

我使用的是NHibernate3.0、VisualStudio2005和.NET2.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,
)
/.NET 2.0属性语法
公共类MyClass
{
//NHibernate需要公共虚拟财产。
私人UInt32_Id;
公共虚拟UInt32 Id{get{return(_Id);}set{u Id=value;}}
}
//hbml.xml
//SQL来创建表
创建表“PumpConnection”(
`Id`**INT**(10)**无符号**非空自动增量,
)

我迟到了一年,但因为我有同样的问题,找到了不同的答案,我想我应该加上它。这似乎更简单。也许它有一个我还没有发现的缺陷

我使用的是NHibernate3.0、VisualStudio2005和.NET2.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,
)
/.NET 2.0属性语法
公共类MyClass
{
//NHibernate需要公共虚拟财产。
私人UInt32_Id;
公共虚拟UInt32 Id{get{return(_Id);}set{u Id=value;}}
}
//hbml.xml
//SQL来创建表
创建表“PumpConnection”(
`Id`**INT**(10)**无符号**非空自动增量,
)

您是否尝试了
sql type
来使用模式生成?不确定这是否是一个缺陷,但我尝试了类似的简单方法,并在值>2^31中遇到了一个问题:在读取时,它们通过NH的管道以
Int64
(签名!)的形式返回,并成为负数(两个的补码?)表示相同的位,然后抛出异常,因为负表示不适合数据类型UInt32。我在NHibernate5上,我的特殊映射是:
map.Component(x=>x.Color,m=>{m.Property(m=>m.Value);})2^31尝试过这个方法吗?您尝试过使用模式生成吗?不确定这是否是一个缺陷,但我尝试了类似的简单方法,并在值>2^31时遇到了一个问题:在阅读时,它们通过NH的管道以
Int64
(签名!)的形式返回,并成为负数(两个的补码?)表示相同的位,然后抛出异常,因为负表示不适合数据类型UInt32。我在NHibernate5上,我的特殊映射是:
map.Component(x=>x.Color,m=>{m.Property(m=>m.Value);})2^31尝试过此操作?使用
NullSafeSet
从uint枚举类型转换时出现问题:在这种情况下,无法将值转换为可为null的类型。使用
uint?u=零;如果(值!=null)u=(uint)值INSTEADALS Equals无法正常工作。工作版本可以是
public new bool Equals(object x,object y){if(object.ReferenceEquals(x,y)){return true;}if(x==null | | y==null){return false;}return(uint)x==(uint)y;}
@fmuecke:在这种情况下,
Equals
将始终接收装箱的值,因此
对象。ReferenceEquals
将始终返回false,并且它们永远不会为null。从具有
NullSafeSet
的uint枚举类型转换时出现问题:在这种情况下,值无法转换为可为null类型。使用
uint?u=零;如果(值!=null)u=(uint)值INSTEADALS Equals无法正常工作。工作版本可以是
public new bool Equals(object x,object y){if(object.ReferenceEquals(x,y)){return true;}if(x==null | | y==null){return false;}return(uint)x==(uint)y;}
@fmuecke:在这种情况下,
Equals
将始终接收装箱的值,因此
对象。ReferenceEquals
将始终返回false,并且它们永远不会为null。