早上在编写执行用例时,突然爆异常System.NullReferenceException: 未将对象引用设置到对象的实例

  执行代码:

  

  

未将对象引用设置到对象的实例。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:

行 168:            foreach(Constraint constrain in c)
行 169:            {
行 170:                IColumn column = _provider.FindTable(typeof(T).Name).GetColumnByPropertyName(constrain.ColumnName);
行 171:                constrain.ColumnName = column.Name;
行 172:                constrain.ConstructionFragment = column.Name;

源文件: E:\Asp.net\******\SubSonic.Core\Query\SqlQuery.cs    行: 170

堆栈跟踪:

[NullReferenceException: 未将对象引用设置到对象的实例。]SubSonic.Query.SqlQuery.Where(Expression`1 expression) in E:\Asp.net\******\SubSonic.Core\Query\SqlQuery.cs:170SubSonicTest.Test.Page_Load(Object sender, EventArgs e) in E:\Asp.net\******\SubSonicTest\Test.aspx.cs:19System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51System.Web.UI.Control.OnLoad(EventArgs e) +92System.Web.UI.Control.LoadRecursive() +54System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772

  

  通过Debug追踪后,发现SqlQuery类的条件添加函数中,在执行通过反射获取泛型类后,查找条件列名并为条件列赋值时,由于没有找到该列而产生的异常

  对此进行相应修改,添加判断,为null时创建泛型对应的表实体,修改如下:

  

  

public SqlQuery Where<T>(Expression<Func<T, bool>> expression) where T : new(){//ExpressionParser parser = new ExpressionParser();IList<Constraint> c = expression.ParseConstraints();/** 修 改 人:Empty(AllEmpty)* QQ    群:327360708* 博客地址:http://www.cnblogs.com/EmptyFS/* 修改时间:2014-04-16* 修改说明:在使用SqlQuery或Select查询时,由于_provider(即DbDataProvider)的Schema.Tables为null,执行FindTable时直接返回null值,*          获取IColumn也是null值,所以使用获取的IColumn对相关变量进行赋值时就会产生System.NullReferenceException异常* 异常信息:System.NullReferenceException: 未将对象引用设置到对象的实例。*********************************************///获取当前泛型对应的Tablevar iTable = _provider.FindTable(typeof (T).Name);//如果为null,则创建它if (iTable == null){iTable = _provider.FindOrCreateTable<T>();}foreach(Constraint constrain in c){//IColumn column = _provider.FindTable(typeof (T).Name).GetColumnByPropertyName(constrain.ColumnName);      //原版本代码IColumn column = iTable.GetColumnByPropertyName(constrain.ColumnName);constrain.ColumnName = column.Name;constrain.ConstructionFragment = column.Name;constrain.DbType = column.DataType;constrain.ParameterName = column.ParameterName;constrain.QualifiedColumnName = column.QualifiedName;constrain.TableName = column.Table.Name;Constraints.Add(constrain);}return this;}

View Code

  

  添加完以上代码后,将SubSonic3.0插件源码重新生成一下就可以正常使用了。

 版权声明:

  本文由AllEmpty原创并发布于博客园,欢迎转载,未经本人同意必须保留此段声明(否则保留追究责任的权利),且在文章页面明显位置给出原文链接,如有问题,可以通过1654937@qq.com 联系我,非常感谢。

  发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:327360708 或Email给我(1654937@qq.com),大家一起探讨。

  更多内容,敬请观注博客:http://www.cnblogs.com/EmptyFS/

转载于:https://www.cnblogs.com/EmptyFS/p/3668121.html

关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复...相关推荐

  1. 关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复

    关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复 参考文章: (1)关于SubSonic3.0插件使用Sq ...

  2. SubSonic3.0插件分页查询速度测试

    使用SubSonic3.0一段时间了,一直都想找机会测试一下各种查询分页速度,对比一下插件的查询效率到底怎么样,所以昨天写好了测试程序,准备好1K.1W.10W.50W和100W记录的数据表,早上详细 ...

  3. MYSQL中的SELECT查询时进行运算

    SELECT在mysql中是查询表中的数据的作用,但也可以在查询的时候直接进行运算,然后返回查询后的结果 比如 1 SELECT user,math*(IFNULL(adven,0)) FROM us ...

  4. mysql查询结果某个字段设置为固定值_MySQL使用select查询时,在查询结果中增加一个字段并指定固定值...

    假设需求是这样的: mysql> desc user; +-------+----------+------+-----+---------+----------------+ | Field ...

  5. PostgreSQL中表的继承及select查询时only的限定

    版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/103974695 相似 ...

  6. SubSonic3.0.0.4.3源码包与调用Dll

    版本修改历史 3.0.0.4.3版修复了下面问题: 修正多表关联查询时,使用左关联和右关联出错问题 修正DbDataProvider.cs类的ToEnumerable函数打开数据库链接后没有关闭的问题 ...

  7. 第6篇:SELECT查询基础篇

    第6篇:SELECT查询基础篇 DQL(Data QueryLanguage):数据查询语言,从数据库中获取数据的,按照DQL的语法给数据库发送一条指令,数据库按照需要返回数据 查询常量 SELECT ...

  8. 关于SubSonic3.0生成的表名自动加复数(s)的“用户代码未处理SqlException,对象名'xxxs'无效”异常处理...

    使用SubSonic3.0模版生成时,同2.2版本一样,都会自动在一些类似数据库要用到的关键后面加要s(复数),这里也是3.0的一个小Bug,在查询时由于插件并没有完全的去掉s,所以会产生" ...

  9. 关于SubSonic3.0生成的表名自动加复数(s)的“用户代码未处理SqlException,对象名‘xxxs‘无效”异常处理

    关于SubSonic3.0生成的表名自动加复数(s)的"用户代码未处理SqlException,对象名'xxxs'无效"异常处理 参考文章: (1)关于SubSonic3.0生成的 ...

最新文章

  1. python怎么创建文件夹视频_python怎么创建文件夹
  2. CNCF 宣布首个中国原创项目 Harbor 毕业 | 云原生生态周报 Vol. 55
  3. 中级软考 计算机指令执行过程(取指、分析、执行)计算机重叠流水线问题
  4. python游戏代码示例_练习项目20:使用python制作游戏(中)
  5. 爬虫 spider10——搭建elk平台,开发服务提供者
  6. VALSE 2020 线上大会简明日程发布(7月31日-8月5日)
  7. PHP curl 参数详解
  8. windows mysql备份与恢复_windows下Mysql自动备份与恢复说明
  9. 延迟加载并渐现内容的jquery插件lazyFade
  10. [状压dp] 洛谷 P1879 玉米田
  11. Swagger入参为List
  12. HFSS - GSM 900 单频PIFA天线的设计与仿真
  13. 服务器数码管不显示,LED数码管不亮的原因及故障排查方法
  14. vue axio的使用
  15. Excel 通过DDE与INTOUCH通信,数据格式
  16. 微信小程序选择图片并转base64
  17. C++多线程技术--API
  18. 贵州2021高考成绩排名查询,贵州高考排名查询方法,2021年贵州高考成绩位次全省排名查询...
  19. https://www.cnblogs.com/richered/p/8344087.html
  20. ubuntu 安装 有道词典

热门文章

  1. 网站推广——网站推广专员浅析如何轻松完成网站关键词优化?
  2. 网页html是什么语言程序,html是什么
  3. c语言空中升级协议,esp32 http空中升级
  4. centos7arm进入图形化_CentOS 7 安装图形化界面
  5. ixf文件 mysql导入,控制 PC/IXF 文件导入数据库的一般规则
  6. java add offer_图解Java中的5大队列!(干货收藏)
  7. 手机linux登陆密码忘了怎么办,忘记linux登陆密码重置的方法
  8. Android Retrofit @Streaming 注解失效
  9. cassandra mongodb选择——cassandra:分布式扩展好,写性能强,以及可以预料的查询;mongodb:非事务,支持复杂查询,但是不适合报表...
  10. python 装饰器中的@wraps