2009-03-12 9 views
5

Varlığım üzerinde uint türünde bir özellik var. Bir şey gibi:SQL Server 2005 ile NHibernate'te uint haritasını eşleme

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

ben SQL Server içine 2005 veritabanına o inat çalıştığınızda, ben

Lehçesi

DbType.UInt32

desteklemeyen bir istisna olsun ne olurdu Bu geçici çözüm için en kolay yol. Örneğin DB'de saklayabilirim. Sadece bunu NHibernate'e nasıl söyleyeceğimi bilmiyorum.

cevap

4

en temiz, en resmi çözüm muhtemelen kullanıcı tipini yazmak olacaktır.

this one gibi bir örnek alın ve uyarlayın. Eğer çok sayıda uint'unuz varsa, bir kullanıcı tipine sahip olmaya değer.

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

Evet, sonuçta yaptığım şey bu. Yardımınız için teşekkürler, hepiniz. –

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

Sonra = "uzun" SchemaExport NHibernate hangi sürümünü kullanıyorsunuz BIGINT –

+0

daha iyi benim için bu * * vermedi çalışma sorunu ... açıklamalıdır edilebilir? –

+0

gibi sahadan ihraç türüyle biraz –

0

Başka bir özel "yansıtma" -property eklemeyi deneyebilirsiniz. o haritalama çözülemeyeceğini eğer

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

Tabii ki bu sadece yapmalıdır.

2

sizin için çalışacaktır eğer bu kadar emin değildi bu denemedim ama kendi Lehçesi oluşturma ve kayıt deneyebilirsiniz web.config/app.config

Lehçesi sınıf içinde:

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>