2009-03-12 14 views
5

Mam właściwość typu uint na mojej jednostki. Coś jak:Jak mapować uint w NHibernate z SQL Server 2005

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

Kiedy próbuję utrzymują, że do bazy danych SQL Server 2005, otrzymuję wyjątek

Dialekt nie obsługuje DbType.UInt32

Jaki byłby najprostszy sposób obejścia tego. Mógłbym na przykład przechowywać go tak długo w DB. Nie wiem tylko, jak to powiedzieć NHibernate.

Odpowiedz

4

najczystszy, najbardziej oficjalny rozwiązanie będzie prawdopodobnie napisać typ użytkownika.

Weź przykład, taki jak this one i dostosuj go. Jeśli masz wiele uint, warto mieć typ użytkownika.

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

Tak, właśnie to ostatecznie zrobiłem. Dzięki za pomoc, wszyscy. –

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

Następnie można należy opisać problem trochę lepiej –

+0

To * nie * Praca dla mnie ... z type = „long” SchemaExport eksportuje boiska BIGINT –

+0

jaka wersja NHibernate używacie? –

0

Możesz spróbować dodać kolejną prywatną "lustro" -property.

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

Oczywiście należy to zrobić tylko jeśli to nie może być rozwiązany przez mapowanie.

2

nie próbowałem tego więc nie wiem, czy to będzie działać dla ciebie, ale można spróbować stworzyć własną gwarę i rejestracji, że w web.config/app.config

klasy

Dialekt:

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> 
Powiązane problemy