c# - 尝试 NHibernate 事务时捕获 SqlException

标签 c# asp.net asp.net-mvc nhibernate exception

我需要查看由 SqlException 生成的错误代码- 但是,我不能让一个人开火。我使用 NHibernate 并且有一个 SQL UNIQUE CONSTRAINT设置在我的 table 上。当违反该约束时,我需要捕获错误代码并据此生成用户友好的消息。这是我的 try/catch 示例:

using (var txn = NHibernateSession.Current.BeginTransaction()) {
    try {
        Session["Report"] = report;
        _reportRepository.SaveOrUpdate(report);
        txn.Commit();
        Fetch(null, report.ReportId, string.Empty);
    } catch (SqlException sqlE) {
        var test = sqlE.ErrorCode;
        ModelState.AddModelError("name", Constants.ErrorMessages.InvalidReportName);
        return Fetch(report, report.ReportId, true.ToString());
    } catch (InvalidStateException ex) {
        txn.Rollback();
        ModelState.AddModelErrorsFrom(ex, "report.");
    } catch (Exception e) {
        txn.Rollback();
        ModelState.AddModelError(String.Empty, Constants.ErrorMessages.GeneralSaving);
    }
}

请原谅我的无知。

最佳答案

Check this out这说明了如何捕获 GenericADOException看看InnerException属性(property):

catch (GenericADOException ex)
{
    txn.Rollback();
    var sql = ex.InnerException as SqlException;
    if (sql != null && sql.Number == 2601)
    {
        // Here's where to handle the unique constraint violation
    }
    ...
}

关于c# - 尝试 NHibernate 事务时捕获 SqlException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393044/

相关文章:

c# - EF6 Code First 从类库迁移导致空白 Up/Down

asp.net-mvc - MVC - 如果图像未在 HTTP post 中重新上传,则不保存空图像数据(来自 SportsStore 示例)

c# - 通过 WCF 提供整个库的功能

c# - C#中如何检查字符串的最后一个字符?

c# - ASP.NET MVC 自定义用户类与 System.Security.Principal.iPrincipal 发生冲突

c# - ASP.NET MVC3 + ActionFilterAttribute + 注入(inject)?

c# - 返回通用 C# 类中列的数据类型

asp.net-mvc - 组织站点管理部分 - 用户部分 MVC

c# - 从 C# 中的 XML 填充下拉列表

c# - OWIN ApiController 访问请求正文/字符串化 JSON