2009-03-12 8 views
5

J'ai une propriété de type uint sur mon entité. Quelque chose comme:Comment mapper uint dans NHibernate avec SQL Server 2005

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

Lorsque je tente de persister que dans la base de données SQL Server 2005, je reçois une exception

Dialect ne supporte pas DbType.UInt32

Quelle serait la moyen le plus facile de contourner ce problème. Je pourrais par exemple le stocker aussi longtemps dans la DB. Je ne sais pas comment le dire à NHibernate.

Répondre

4

les plus propres, solution plus officielle serait probablement d'écrire un type d'utilisateur. Prenez un exemple, comme this one et adaptez-le. Si vous avez beaucoup de uint, cela vaut la peine d'avoir un type d'utilisateur.

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

Ouais, c'est ce que j'ai finalement fini par faire. Merci pour votre aide, les gars, vous tous. –

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

Alors peut-être vous devriez décrire le problème un peu mieux –

+0

* Ce ne * travail pour moi ... avec type = « long » SchemaExport exporte le terrain BIGINT –

+0

quelle version de NHibernate utilisez-vous? –

0

Vous pourriez essayer d'ajouter un autre "miroir" privé-propriété.

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

Bien sûr, vous devez faire ce que si elle ne pouvait pas être résolu par la mise en correspondance.

2

N'a pas essayé donc pas sûr si cela fonctionnera pour vous, mais vous pourriez essayer de créer votre propre Dialecte et de l'enregistrement que dans le 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> 
Questions connexes