use*_*238 7 c# triggers entity-framework-4
我有实体框架设置来更新表.更新被一个代替触发器拦截,该触发器调用RAISERROR:
CREATE TRIGGER mySchema.UpdateBusinessObjects
ON mySchema.BusinessObjects
INSTEAD OF UPDATE
AS
RAISERROR(''test error from SQL'',16,1)
RETURN
Run Code Online (Sandbox Code Playgroud)
在我的repository类中,我试图捕获SQL中RAISERROR生成的SqlException:
public void SaveBusinessObject(BusinessObject b) {
try {
repo.Entry(b).State = EntityState.Modified;
repo.SaveChanges();
} catch (SqlException ex) {
// handle exception here
}
}
Run Code Online (Sandbox Code Playgroud)
问题是C#没有捕获SqlException; 它作为未处理的异常传递给调用者("用户未处理SqlException:来自SQL的测试错误").什么?!
看起来EF的SaveChanges()不知何故在我的try catch块上传递异常.我已经尝试将我的catch语句切换为catch(Exception ex),以防EF异常在某种程度上更通用,但我仍然得到一个未处理的SqlException.我错过了一些简单的东西吗?SaveChanges()方法有什么问题?
我知道避免一次 try catch 出现异常的唯一方法是在不同的线程中出现异常。EF代码可以在不同的线程上执行吗?也许您可以在“异常”对话框中启用 1\xc2\xba 机会抛出异常。
\n