当标签已经存在于标签表中时,我将其插入,因此它返回消息,
<块引用>消息“无法在具有唯一索引“IX_Tag_Name”的对象“dbo.Tag”中插入重复的键行。重复的键值为 (Lemon)。\r\n语句已终止。”字符串
我已尝试通过检查 Number
2601 来捕获此唯一异常,但无法访问 Number
属性。
显然,这就是您假设捕获异常的方式,但 ex.InnerException.InnerException
为空,因此 switch 语句永远不会执行。
How can I catch UniqueKey Violation exceptions with EF6 and SQL Server?
catch (DbUpdateException ex)
{
if (ex.InnerException.InnerException is SqlException sqlException)
{
switch (sqlException.Number)
{
// If the tag already exists
case 2601: // Unique Key violation
}
}
}
答案 0 :(得分:2)
您的代码正在检查内部异常的内部异常。这是空的,因此您的代码失败。而是这样做:
catch (DbUpdateException ex)
{
if (ex.InnerException is SqlException sqlException)
{
switch (sqlException.Number)
{
// If the tag already exists
case 2601: // Unique Key violation
}
}
}