我知道异常的原因(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()); } }