Одна из моих таблиц имеет уникальный ключ, и когда я пытаюсь вставить дублируемую запись, она генерирует исключение, как ожидалось. Но мне нужно отличать исключительные ключевые исключения от других, так что я могу настроить сообщение об ошибке для уникальных нарушений ограничения ключа.
Все решения, которые я нашел в Интернете, предлагают отбрасывать 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
.
В чем проблема с кодом выше? Как я могу уловить нарушения уникального ключа?