我已经设置了Entity Framework来更新一个表格。更新会被一个instead-of触发器拦截,该触发器会调用RAISERROR:
CREATE TRIGGER mySchema.UpdateBusinessObjects
ON mySchema.BusinessObjects
INSTEAD OF UPDATE
AS
RAISERROR(''test error from SQL'',16,1)
RETURN
在我的存储库类中,我试图捕获由SQL中的RAISERROR生成的SqlException异常:
public void SaveBusinessObject(BusinessObject b) {
try {
repo.Entry(b).State = EntityState.Modified;
repo.SaveChanges();
} catch (SqlException ex) {
// handle exception here
}
}
问题在于C#没有捕获SqlException,它作为未处理的异常传递给调用者("SqlException was unhandled by user: test error from SQL")。看起来EF的SaveChanges()方法不知怎么把异常传递到我的try catch块之上。为了避免EF异常可能更通用的情况,我尝试将catch语句切换为catch (Exception ex),但仍然出现未处理的SqlException。我是否忽略了一些简单的东西?SaveChanges()方法存在什么问题?