سؤال

ما هي أفضل طريقة لرسم خريطة uint32 إلى نوع SQL-Server int مع nhibernate.

القيمة هي عرض/ارتفاع الصورة ، لذا فإن القيمة السلبية ليست منطقية هنا.

ولكن ربما يجب أن أستخدم int لأن nhibenate لا يدعم ints غير المعينة.

هل كانت مفيدة؟

المحلول

يمكنك تعيين العمود باستخدام 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 );
    }
}

نصائح أخرى

لقد تأخرت عامًا ، لكن بما أن لدي نفس السؤال ووجدت إجابة مختلفة اعتقدت أنني سأضيفها. يبدو أبسط. ربما يحتوي على عيب لم أكتشفه بعد.

أنا أستخدم Nhibernate 3.0 و Visual Studio 2005 و .net 2.0.x.

لقد وجدت أنه يمكنني استخدام فئة UINT32 .NET وعدم تضمين سمة النوع في HBM.XML.

// .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,
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top