我有一个正在尝试调试的使用 .net Entity Framework 的应用程序。如果我可以在 entities.SaveChanges() 周围的 C# 代码中放置一个 try catch 并能够区分由于 sql 触发器在执行过程中失败而发生的错误以及发生的其他错误,这将使事情变得容易得多。我想知道是否有人知道这是否可能/如何做到这一点。
例如
try{
entities.SaveChanges();
}Catch(Exception e){
if(e is MysterySqlTriggerException){
//do something
}else{
//do something else
}
}
/** 编辑**/
下面是我最终用来处理这个问题的最终递归方法
public void HandleTriggerException(Exception e)
{
if (e is SqlException)
{
//check if it is from a trigger
SqlException sqlException = (SqlException)e;
if (sqlException.Procedure.Contains("tr_")) //all my trigger names start with "tr_"
{
//trigger failed. Handle exception.
}
}
if (e.InnerException != null)
{
HandleTriggerException(e.InnerException);
}
}
最佳答案
您需要在引发的 SqlException
的属性中搜索您要查找的内容。检查您感兴趣的异常的值并执行类似于以下代码的操作:
void HandleSqlException(SqlException e)
{
if (sqlex.Procedure == "myTrigger" || sqlex.Message.Contains("myTrigger"))
{
// act
}
}
...
try
{
entities.SaveChanges();
}
catch (System.Data.DataException dex)
{
if (dex.InnerException is SqlException)
HandleSqlException((SqlException)dex);
}
catch (SqlException sqlex)
{
HandleSqlException(sqlex);
}
catch (Exception e)
{
// non-SQL exception handling
}
关于c# - 我可以在 Entity Framework 中尝试/捕获 sql server 触发器错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883109/