zoukankan      html  css  js  c++  java
  • 关于SubSonic3.0查询或更新时出现System.NullReferenceException异常的处理

        在调试程序时,同事发现添加记录时,出现了System.NullReferenceException异常

        DictBase dict = new DictBase();
        dict.DictCode = "aaa";
        dict.DictName = "bbb";
        dict.Save();

        而自己在编写查询Information info = new Information(x => x.Id == 1);  时,也引发了同样的异常,经Debug发现,问题出现在SubSonic.Schema.DatabaseTable类的函数

            public IColumn GetColumnByPropertyName(string PropertyName)
            {
                return Columns.SingleOrDefault(x => x.PropertyName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
            }

        发现PropertyName属性为null而引起的空指针异常,心想是不是因为没有捕捉到异常而引起的,就将函数修改为下面代码:

            public IColumn GetColumnByPropertyName(string PropertyName)
            {
                try
                {
                    return Columns.SingleOrDefault(x => x.PropertyName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase));
                }
                catch (Exception) { }
                return null;
            }

        改完后发现这个位置没问题了,但却引发了另外一个异常(Need to specify Values or a Select query to insert - can't go on!),意思是说插入的语句没有具体的值,然后通过Debug追踪,原来是加了异常捕捉后,返回的内容都为null了,没有运行到SQL执行语句值的添加操作,即SubSonic.Extensions.Database类的ToInsertQuery函数在执行前面函数返回值时为null时,query.Value(col.QualifiedName, hashed[key], col.DataType);这段语句没有执行到导致出错,就是说PropertyName一直都没有赋到值引起的null异常并没有找到根源,所以又从头开始Debug,一步步跟踪到Structs1.cs这个由模版生成的类里,发现在生成数据库表对应的架构一直到最后使用,并没有对PropertyName属性进行赋值。所以打开Structs.tt这个模版文件,将数据字段结构生成那里做了下面的修改,添加了PropertyName属性(请看下图),然后运行代码,没有报错,打开数据库发现表里已经成功添加了一条记录。

     

      本文章为原创内容,转载请保留下面信息。

      发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:SubSonic3.0学习群(327360708)或Email给我(1654937#qq.com),大家一起探讨,由于本人工作很繁忙,如果疑问请先留言,回复不及时也请谅解。

      想了解更多SubSonic3.0的相关问题,请观注博客:http://www.cnblogs.com/EmptyFS/

  • 相关阅读:
    jQuery UI DatePicker用法和中文设置
    jQuery的ajax方法
    jQuery遍历复杂的JSON数据
    JavaScript面向对象的写法
    jpa
    日志
    全局异常的处理!
    oracle表空间
    plsql的连接配置
    pLsql使用
  • 原文地址:https://www.cnblogs.com/EmptyFS/p/3202509.html
Copyright © 2011-2022 走看看