我的一个表具有唯一键,当我尝试插入重复记录时,它会像预期的那样抛出异常。但是我需要区分唯一键异常和其他异常,以便我可以为唯一键约束违规自定义错误消息。
我在网上找到的所有解决方案都建议将ex.InnerException
转换为System.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.";
}
}
但问题是,将ex.InnerException
转换为System.Data.SqlClient.SqlException
会导致无效的强制类型转换错误,因为ex.InnerException
实际上是System.Data.Entity.Core.UpdateException
类型,而不是System.Data.SqlClient.SqlException
。
上面的代码有什么问题?如何捕获唯一键约束冲突?