Come mappare uint in NHibernate con SQL Server 2005
-
11-07-2019 - |
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.
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.