2009-03-12 36 views
5

Tôi có thuộc tính kiểu uint trên thực thể của mình. Một cái gì đó như:Cách ánh xạ uint trong NHibernate với SQL Server 2005

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

Khi tôi cố gắng để tồn tại đó vào cơ sở dữ liệu SQL Server 2005, tôi nhận được một ngoại lệ

Dialect không hỗ trợ DbType.UInt32

Điều gì sẽ là cách dễ nhất để giải quyết vấn đề này. Tôi có thể ví dụ lưu trữ nó lâu trong DB. Tôi chỉ không biết làm thế nào để nói với NHibernate.

Trả lời

4

Các sạch, giải pháp chính thức nhất có lẽ sẽ phải viết một loại người dùng.

Lấy ví dụ, như this one và điều chỉnh nó. Nếu bạn có nhiều số uint thì rất cần có loại người dùng.

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

Vâng, đó là điều cuối cùng tôi đã làm. Cảm ơn các bạn đã giúp đỡ, tất cả các bạn. –

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

Sau đó có thể được bạn nên mô tả các vấn đề tốt hơn một chút –

+0

này * đã * làm việc cho tôi ... với type = "dài" SchemaExport xuất khẩu sân khi bigint –

+0

gì phiên bản của NHibernate nào bạn sử dụng? –

0

Bạn có thể thử thêm một tài khoản "gương" riêng tư khác.

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

Tất nhiên bạn nên làm điều này chỉ nếu nó không thể được giải quyết bằng cách lập bản đồ.

2

Đã không cố gắng này vì vậy không chắc chắn nếu điều này sẽ làm việc cho bạn, nhưng bạn có thể thử tạo Dialect của riêng bạn và đăng ký mà trong web.config/app.config

Dialect lớp:

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> 
Các vấn đề liên quan