我正在将一个复杂的对象树保存回我的sql server数据库。
对象树上的一个字段必须是null
或有趣的日期,因为我收到此错误消息。
“SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和之间 12/31/9999 11:59:59 PM。“
我可以通过使用视觉工作室检查员找到它并向下钻取,直到找到狡猾的领域,但这非常耗时。此外,它并没有导致一个伟大的日志记录错误消息。
他们是否可以使用nhibernate来返回带有错误消息的违规字段名称?
我没有做任何花哨的事,
public TEntity Save(TEntity entity)
{
return Save(entity, false);
}
注意:我使用流利的nhibernate来配置
答案 0 :(得分:1)
NHibernate不会告诉你哪个字段会导致这种情况,但很容易缩小范围:99%的确定性,它是一个不可空的 DateTime
字段,你还没有初始化,它的默认值为1/1/1(IIRC),显然超出范围。
答案 1 :(得分:0)
我不能代表SQL Server,但是对于SQLite,通常会显示违规字段的名称,但是在异常消息或内部异常中深深埋没,很容易错过。
简单地调用异常的ToString()方法可能很有价值,该方法将创建包含所有消息文本的单个字符串,包括所有内部异常,并在消息框中显示它。
或者,在立即窗口中键入以下内容,例如
Debug.Print( ex.ToString() )
当你能够立刻看到它时,你可能会发现你需要埋在中间的某个地方。