相关疑难解决方法(0)

如何使用EF6和SQL Server捕获UniqueKey Violation异常?

我的一个表有一个唯一的密钥,当我尝试插入一个重复的记录时,它会按预期抛出异常.但我需要区分唯一的密钥异常,以便我可以为唯一的密钥约束违规自定义错误消息.

我发现所有的解决方案在网上提出投ex.InnerExceptionSystem.Data.SqlClient.SqlException和检查,如果Number属性等于2601或2627,如下所示:

try
{
    _context.SaveChanges();
}
catch (Exception ex)
{
    var sqlException = ex.InnerException as System.Data.SqlClient.SqlException;

    if (sqlException.Number == 2601 || sqlException.Number == 2627)
    {
        ErrorMessage = "Cannot insert duplicate values.";
    }
    else
    {
        ErrorMessage = "Error while saving data.";
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是,铸造ex.InnerExceptionSystem.Data.SqlClient.SqlException原因无效的转换错误,因为ex.InnerException实际上是一个类型的System.Data.Entity.Core.UpdateException,不是System.Data.SqlClient.SqlException.

上面的代码有什么问题?如何捕获Unique Key Constraint违规?

c# sql-server exception-handling unique-key entity-framework-6

44
推荐指数
5
解决办法
4万
查看次数