Domanda

Ho una proprietà di tipo uint sulla mia entità. Qualcosa del tipo:

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

Quando provo a persistere nel database di SQL Server 2005, ottengo un'eccezione

  

Il dialetto non supporta DbType.UInt32

Quale sarebbe il modo più semplice per risolvere il problema. Ad esempio, potrei memorizzarlo il più a lungo nel DB. Solo non so come dirlo a NHibernate.

È stato utile?

Soluzione

La soluzione più pulita e più ufficiale sarebbe probabilmente quella di scrivere un tipo di utente.

Prendi un esempio, come questo e adattalo. Se hai molti uint , vale la pena avere un tipo di utente.

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

Altri suggerimenti

Non l'ho provato, quindi non sono sicuro che funzionerà per te, ma potresti provare a creare il tuo dialetto e registrarlo in web.config / app.config

Classe dialettale:

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"/>

Puoi provare ad aggiungere un'altra proprietà privata " mirror " ;.

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"/>

Ovviamente dovresti farlo solo se non è stato possibile risolverlo con la mappatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top