文档章节

NHibernate 的 SetResultTransformer 方法在Oracle下的Bug修复

刘明欢
 刘明欢
发布于 2014/08/11 20:07
字数 224
阅读 492
收藏 0

    NHibernate 的 SetResultTransformer 方法在Oracle下会出现“Could not find a setter for property”错误,这是Nhibernate在Oracle下使用的一个Bug。针对此Bug我可以自己进行修复。

    下载NHibernate源码,将Property下的“ChainedPropertyAccessor.cs”稍作修改就会修复此Bug,代码如下:

using System;

namespace NHibernate.Properties
{
    using System.Text.RegularExpressions;

    [Serializable]
    public class ChainedPropertyAccessor : IPropertyAccessor
    {
        private readonly IPropertyAccessor[] chain;

        public ChainedPropertyAccessor(IPropertyAccessor[] chain)
        {
            this.chain = chain;
        }

        #region IPropertyAccessor Members

        public IGetter GetGetter(System.Type theClass, string propertyName)
        {
            for (int i = 0; i < chain.Length; i++)
            {
                IPropertyAccessor candidate = chain[i];
                try
                {
                    return candidate.GetGetter(theClass, propertyName);
                }
                catch (PropertyNotFoundException)
                {
                    // ignore
                }
            }
            throw new PropertyNotFoundException(theClass, propertyName, "getter");
        }

        public ISetter GetSetter(System.Type theClass, string propertyName)
        {
            for (int i = 0; i < chain.Length; i++)
            {
                IPropertyAccessor candidate = chain[i];
                try
                {
                    return candidate.GetSetter(theClass, ToModelName(propertyName));
                }
                catch (PropertyNotFoundException)
                {
                    //
                }
            }
            throw new PropertyNotFoundException(theClass, propertyName, "setter");
        }

        public bool CanAccessThroughReflectionOptimizer
        {
            get { return false; }
        }

        #endregion


        private static string ToModelName(string str)
        {
            str = str.ToLower();
            var temp = Regex.Replace(str, @"_[a-z]?",m=>m.ToString().Substring(1).ToUpper());
            var result = Regex.Replace(temp, @"^[a-z]?", m => m.ToString().ToUpper());

            return result;
        }
    }
}


© 著作权归作者所有

刘明欢
粉丝 3
博文 3
码字总数 949
作品 3
成都
私信 提问
Visual Entity 下载列表(最新版为 1.8.0 ,已支持Postgre&DB2,即将支持 Sysbase ASE)

发展线路: 2.x 将支持的功能有: 1、增加重构功能。当修改类或属性名称,提示并进行重构以更新所有引用。 2、允许将自定义的特性放在属性窗口中,以方便编辑。 3、Web Services 代码生成。 ...

长平狐
2013/06/17
313
1
NHibernate 5.0 发布,对象关系映射解决方案

NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。NHibernate 从数据库底层来持久化你的.Net 对象到关系...

周其
2017/10/16
1K
6
NHibernate 3.0.0.Alpha1 发布及新特性介绍

刚刚NHibernate的Leader——Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本。 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Net3.5...

李永波
2010/08/05
1K
0
Nhibernate 3.00

发布 刚刚NHibernate的Leader——Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本。 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Ne...

李永波
2010/08/05
0
1
NHibernate映射oracle数据库CLOB、BLOB类型大数据字段

最初始最简单的方法如下: 首先建一个测试类: public class testClass { //需要映射为CLOB类型的字段 public string WKT{get;set;} } nhibernate配置文件中: <property column="WKT" type=......

彩色铅笔
2014/07/17
0
2

没有更多内容

加载失败,请刷新页面

加载更多

好程序员分享Python自动化运维开发实战 六、流程控制

好程序员分享Python自动化运维开发实战 六、流程控制 PYTHON 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 Python程序语言指定任何非0和非...

好程序员IT
26分钟前
0
0
5年经验的Java工程师面试答不出反射和动态代理!怕是只会CRUD哦

分享阿里 P8 高级架构师吐血总结的 《BATJ大厂高级Java必问面试学习视频》,附送 100G 面试学习视频文档 阿里 P8 级高级架构师吐血总结的面试学习视频, 内容覆盖很广,分布式缓存、RPC 调用、...

戎码益深
46分钟前
1
0
加权查询

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_cross_fields_queries.html 假设二维向量,如果一个维度设为无穷大,无论另一个维度为多大(具体值),向量都是与坐标轴平行...

Java搬砖工程师
47分钟前
3
0
GLIBC等相关文件升级更新

###参考资料:https://blog.csdn.net/glongljl/article/details/80156243###安装更新libstdc++.so文件https://blog.csdn.net/xdzhangzhenhao/article/details/80746403找一个更高版本的......

KYO4321
48分钟前
2
0
C# Dev XtraTabControl添加关闭页签功能

这个功能在界面操作上很常见,记录下,希望可以帮助您,请持续关注我。 一、添加关闭功能 若要tabpage显示关闭按钮,把xtraTabControl的ClosePageButtonShowMode属性设为InAllTabPageHeaders...

黑鹰客栈
53分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部