【发布时间】:2015-10-09 12:47:45
【问题描述】:
我的一个表有一个唯一键,当我尝试插入重复记录时,它会按预期抛出异常。但是我需要将唯一键异常与其他异常区分开来,这样我就可以自定义违反唯一键约束的错误消息。
我在网上找到的所有解决方案都建议将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。
上面的代码有什么问题?如何捕获违反唯一键约束的行为?
【问题讨论】:
标签: c# sql-server exception-handling entity-framework-6 unique-key