加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – Nhibernate:如何为SqlDateTime溢出异常找到负责

发布时间:2020-12-12 07:08:19 所属栏目:MsSql教程 来源:网络整理
导读:我知道异常的原因(SqlDateTime溢出.必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间.)是实体中不可为空的DateTime字段,所以Nhibernate希望保存比MSSQL接受的更小的DateTime值. 问题是项目中有很多实体要找到正确的DateTime字段. 该异常发生在SaveOrU
我知道异常的原因(SqlDateTime溢出.必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间.)是实体中不可为空的DateTime字段,所以Nhibernate希望保存比MSSQL接受的更小的DateTime值.

问题是项目中有很多实体要找到正确的DateTime字段.

该异常发生在SaveOrUpdate()之后,但不是由我想要保存的实体触发,而是在当前会话中加载的任何其他实体现在受flush()的影响.

我怎样才能找出哪个字段真正应对异常负责?

解决方法

如果将异常强制转换为SqlTypeException,则会公开Data集合.通常,集合中只有一个Key和一个Value.该值是尝试执行的SQL.通过检查DML,您可以看到正在对哪个表进行操作.希望该表足够窄,以确定违规列是微不足道的.

这是我用来吐出异常的Key和Value的一些简单代码.

catch (SqlTypeException e)
            {
                foreach(var key in e.Data.Keys)
                {
                    System.Console.Write("Key is " + key.ToString());
                }
                foreach(var value in e.Data.Values)
                {
                    Console.WriteLine("Value is "+value.ToString());
                }
            }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读