说是新认识,就是说之前不知道它是这么用的。
之前认识try...catch...,就是捕获异常,但这个捕获异常只是:当try的语句错误后,直接到catch的语句,这样界面就不会报错了。所以,仅把它当做了遮挡错误的工具。
而今天调错的过程中,却是利用try...catch...的捕获异常的功能,找到了错误的所在,并将它解决了。
当时错误出在:this.DbSession.SaveChanges();
错误信息是:对一个或多个实体的验证失败 有关详细信息,请参见"EntityValidationErrors"属性。
这是底层封装好的方法,已经没有人再维护、更改了,并且已经用了很久,所以我没有深究它的错误,我知道错误肯定在别处,但却毫无思绪。有猜测是传参不正确导致的错误,但也不能具体到是哪个参数传错了。
经过查询资料,得知try...catch可以找到问题的根源,所以进行了尝试:
在报错的代码处加上try...catch:
try
{
this.CurrentDal.Add(enCheckScore);//自己的代码
this.DbSession.SaveChanges();//自己的代码(源报错的代码)
}
catch (DbEntityValidationException dbEx)
{
throw;
}
若DbEntityValidationException不能自动提示写出,则添加引用:
using System.Data.Entity.Validation;
然后运行,就会得到这样的信息:(以评教代码为例:)
报错的误提示中的EntityValidationErrors也在这个图中。而展开的信息中,就明确告诉了我们问题在哪:有个字段是必须的,也就是我没给它传值,导致了错误。
知道错误所在,改就是轻而易举的事了......
从这个过程中,感触最深的就是try...catch的用法,原来还可以这么用......