2009-03-12 14 views
5

Ho una proprietà di tipo uint sulla mia entità. Qualcosa di simile:Come mappare uint in NHibernate con SQL Server 2005

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

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

Dialetto non supporta DbType.UInt32

Quale sarebbe il modo più semplice per risolvere il problema. Potrei ad esempio memorizzarlo tanto a lungo nel DB. Solo non so come dirlo a NHibernate.

risposta

4

il più pulito, soluzione più ufficiale probabilmente sarebbe di scrivere un tipo di utente.

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

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

Sì, questo è quello che alla fine ho finito per fare. Grazie per l'aiuto ragazzi, tutti voi. –

1
<property name="Prop" type="long"/> 
+0

Quindi può essere che si dovrebbe descrivere il problema un po 'meglio –

+0

Questo lavoro * ha * per me ... con type = "long" SchemaExport esporta il campo come BIGINT –

+0

quale versione di NHibernate si usa? –

0

Si potrebbe provare ad aggiungere un altro "mirror" privato -proprietà.

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 si deve fare questo solo se non potrebbe essere risolto con la mappatura.

2

Non ho provato questo quindi non so se questo sarà il lavoro per voi, ma si potrebbe provare a creare il proprio dialetto e la registrazione che nel web.config/app.config

classe

Dialect:

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> 
Problemi correlati