代码之家  ›  专栏  ›  技术社区  ›  Fitzchak Yitzchaki

nhibernate-如何在数据库中存储uint32

  •  0
  • Fitzchak Yitzchaki  · 技术社区  · 14 年前

    使用nhibernate将uint32类型映射到SQL Server int类型的最佳方法是什么?

    该值是图片的宽度/高度,因此此处的负值没有意义。

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

    2 回复  |  直到 12 年前
        1
  •  3
  •   Lachlan Roche    14 年前

    可以使用IUserType映射列。

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

    以及映射的iuserType UInt32? 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 );
        }
    }
    
        2
  •  2
  •   Conner    12 年前

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

    我正在使用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,
    )