首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NHibernate中支持UINt32

在NHibernate中支持UINt32
EN

Stack Overflow用户
提问于 2012-07-23 15:38:53
回答 1查看 745关注 0票数 0

我正在尝试在我的application.By looking示例中支持UInt32,我写了我的代码。NHibernate - How to store UInt32 in database。在我的hbm文件中,我定义了属性标签:

代码语言:javascript
复制
           <property name="Uint16Var" column="Uint16Var" 
           type="datatypeSupported.UInt32Type,  datatypeSupported"  />

我还像这样定义了一个UInt32Type类:

代码语言:javascript
复制
     using System;
     using NHibernate;
     using NHibernate.SqlTypes;
     using NHibernate.UserTypes;

    namespace datatypeSupported
    {
     public class UInt32Type : IUserType
    {

    public object NullSafeGet(System.Data.IDataReader rs, string[] names, object owner)
    {
        int? i = (int?)NHibernateUtil.Int32.NullSafeGet(rs, names[0]);
        return (UInt32?)i;
    }

    public void NullSafeSet(System.Data.IDbCommand cmd, object value, int index)
    {
        UInt32? u = (UInt32?)value;
        int? i = (Int32?)u;
        NHibernateUtil.Int32.NullSafeSet(cmd, i, index);  
    }

    public Type ReturnedType
    {
        get
        {
            return typeof(Nullable<UInt32>);
        }
    }

    public SqlType[] SqlTypes
    {
        get
        {
            return new SqlType[] { SqlTypeFactory.Int32 };
        }
    } public object Assemble(object cached, object owner) 
    { 
        return cached; 
    } 

    public object DeepCopy(object value)
    { 
        return value;
    } 

    public object Disassemble(object value) 
    {
        return value; 
    } 

    public int GetHashCode(object x) 
    { 
        return x.GetHashCode(); 
    }

    public bool IsMutable
    {
        get { return false; }
    } 

    public object Replace(object original, object target, object owner) 
    { 
        return original; 
    } 

    public new bool Equals(object x, object y) 
    { 
        return x != null && x.Equals(y);
    }
}

}

但是,当我试图保存我的实体时,它给出了一个错误“方言不支持DbType.UInt32".What类型的更改我需要做吗?

EN

回答 1

Stack Overflow用户

发布于 2012-07-23 16:07:32

编写一个支持UInt32类型的自定义方言。根据您正在使用的数据库,从一种已知的方言继承。也就是说,对于SQL Server,您可以拥有如下内容:

代码语言:javascript
复制
public class CustomMsSqlDialect : MsSql2008Dialect
{
    protected override void RegisterNumericTypeMappings()
    {
        base.RegisterNumericTypeMappings();
        RegisterColumnType(DbType.UInt32, "INT");
    }
}

要向FluentNHibernate注册方言:

代码语言:javascript
复制
Fluently.Configure().Database(
    MsSqlConfiguration.MsSql2008.Dialect<CustomMsSqlDialect>()...)

使用XML:

代码语言:javascript
复制
<property name="dialect">CustomMsSqlDialect, AssemblyName</property>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11608219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档