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