c# - 我可以在 Entity Framework 中尝试/捕获 sql server 触发器错误吗

标签 c# .net entity-framework

我有一个正在尝试调试的使用 .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/

相关文章:

c# - Curiously Recurring Template Pattern 和泛型约束 (C#)

c# - 使用 Windows 7 流媒体

c# - 盲目地将结构转换为类以隐藏默认构造函数?

entity-framework - Entity Framework CTP 5 - 存储库模式 - 进行更新

c# - 如何让 DelegateCommand CanExecute 使用 MVVM 更新 WPF UI?

c# - System.Text.Json.JsonException : A possible object cycle was detected

c# - 如何模拟返回的模拟对象的方法?

c# - .NET Core NuGet EF Core 版本不匹配

c# - 为什么 XML-Serializable 类需要无参数构造函数

c# - 当尝试将 json 字符串解析为所述对象时,为什么我的对象为 null