Frage

Ich habe eine Eigenschaft vom Typ Uint auf meinem Unternehmen. Etwas wie:

public class Enity
{
   public uint Count {get;set;}
}

Wenn ich versuche, dies in die SQL Server 2005 -Datenbank zu bestehen, bekomme ich eine Ausnahme

Dialekt unterstützt DBTYPE.Uint32 nicht

Was wäre der einfachste Weg, dies zu verarbeiten? Ich könnte es zum Beispiel so lange in der DB speichern. Ich weiß nur nicht, wie ich das Nhibernate erzählen soll.

War es hilfreich?

Lösung

Das sauberste, am offiziellsten Lösung wäre wahrscheinlich, einen Benutzertyp zu schreiben.

Ein Beispiel nehmen wie Dieses hier und passen Sie es an. Wenn Sie viele haben uintEs lohnt sich, einen Benutzertyp zu haben.

<property name="Prop" type="UIntUserType"/>

Andere Tipps

Ich habe dies nicht sichergestellt, also nicht sicher, ob dies für Sie funktioniert, aber Sie können versuchen, Ihren eigenen Dialekt zu erstellen und dies in der web.config/App.config zu registrieren

Dialektklasse:

public class MyDialect:MsSql2005Dialect
{
    public MyDialect()
    {            
        RegisterColumnType(System.Data.DbType.UInt32, "bigint");            
    }
}

Web.config:

configuration>
 <configSections>
  <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
 </configSections>

                <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
   <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider, NHibernate</property>
   <property name="connection.connection_string">
    Server=127.0.0.1; Initial Catalog=thedatabase; Integrated Security=SSPI
   </property>
   <property name="dialect">MyDialect</property>
   <property name="current_session_context_class">managed_web</property>
  </session-factory>
 </hibernate-configuration>
    <!-- other app specific config follows -->

</configuration>
<property name="Prop" type="long"/>

Sie könnten versuchen, einen weiteren privaten "Mirror" -Property hinzuzufügen.

public class Enity
{
   public uint Count {get;set;}

   private long CountAsLong 
   { 
     get { return Convert.ToInt64(Count); } 
     set { Count = Convert.ToUInt(value); }
   }
}

<property name="CountAsLong" type="long"/>

Natürlich sollten Sie das tun nur Wenn es nicht durch die Zuordnung gelöst werden könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top