我有一个尝试使用.net实体框架进行调试的应用程序。如果我可以在entity.SaveChanges()周围的C#代码中进行尝试捕获,并且能够区分由于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
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句