gpt4 book ai didi

c# - 如何捕获在 Entity Framework 4 触发的触发器中调用的 RAISERROR 抛出的 SqlException?

转载 作者:太空狗 更新时间:2023-10-29 20:40:17 24 4
gpt4 key购买 nike

我设置了 Entity Framework 来更新表格。更新被调用 RAISERROR 的 instead-of 触发器拦截:

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 未被用户处理:来自 SQL 的测试错误”)。什么?!

看起来 EF 的 SaveChanges() 以某种方式通过我的 try catch block 传递异常。我已经尝试将我的 catch 语句切换为 catch (Exception ex) 以防 EF 异常在某种程度上更普遍,但我仍然得到未处理的 SqlException。我在这里错过了一些简单的东西吗? SaveChanges() 方法有什么问题?

最佳答案

我尝试了与表上几乎完全相同的触发器,并尝试通过 Entity Framework 保存相应的(新)对象。据我所知,抛出的异常是 System.Data.UpdateException 类型,而不是 SqlException。内部异常是 SqlException,它确实包含您在触发器中引发的自定义消息,即“来自 SQL 的测试错误”。希望这有帮助

关于c# - 如何捕获在 Entity Framework 4 触发的触发器中调用的 RAISERROR 抛出的 SqlException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com