2009-03-12 10 views
5

Ich habe eine Eigenschaft des Typs Uint auf meiner Entität. Etwas wie:Wie UIN in NHibernate mit SQL Server 2005 abbilden

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

Wenn ich versuche, das beharren in die SQL Server 2005-Datenbank, erhalte ich eine Ausnahme

Dialect unterstützen DbType.UInt32 nicht

Was wäre der einfachste Möglichkeit, dies zu umgehen. Ich könnte es zum Beispiel so lange in der DB speichern. Ich weiß nur nicht, wie das zu NHibernate zu sagen ist.

Antwort

4

Die sauberste, meisten offiziellen Lösung wäre wahrscheinlich einen Benutzertyp zu schreiben.

Nehmen Sie ein Beispiel, wie this one und passen Sie es an. Wenn Sie viele uint 's haben, ist es einen Benutzertyp wert.

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

Ja, letztendlich habe ich das getan. Danke für die Hilfe Jungs, euch alle. –

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

Dann werden können, sollten Sie das Problem ein wenig besser –

+0

beschreiben * Das für mich habe * Arbeit ... mit type = „long“ Schema das Feld als BIGINT –

+0

welche Version von NHibernate exportiert verwenden Sie? –

0

Sie könnten versuchen, eine weitere private "Spiegel" -Eigenschaft 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 tun, um diese nur, wenn es nicht durch die Abbildung gelöst werden könnte.

2

haben versucht, diese nicht so nicht sicher, ob dies für Sie arbeiten, aber Sie könnten versuchen, Ihren eigenen Dialect erstellen und die Registrierung, die in der web.config/app.config

Dialect Klasse:

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>