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

前端之家收集整理的这篇文章主要介绍了sql-server – Nhibernate:如何为SqlDateTime溢出异常找到负责的字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道异常的原因(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());
                }
            }

猜你在找的MsSQL相关文章