我的一个表有一个唯一的密钥,当我尝试插入一个重复的记录时,它会按预期抛出异常.但我需要区分唯一的密钥异常,以便我可以为唯一的密钥约束违规自定义错误消息.
我发现所有的解决方案在网上提出投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.";
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是,铸造ex.InnerException到System.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