STE бросают два типа исключения:
- UpdateException
- InvalidOperationException
С помощью UpdateException мы можем проверить внутренний SQLExeption.Number, чтобы идентифицировать исключение (например, 515 = NullNotAllowed)
Кажется, InvalidOperationException не предоставляет код. Свойство Hresult защищено.
В настоящее время я анализирую InvalidOperationException.Message, которое выглядит ужасно:
Try
Using ctx AS New MyEntities
ctx.Orders.ApplyChanges(order)
ctx.SaveChanges()
End Using
Catch ex As InvalidOperationException When ex.Message.Contains("...foreign-key properties is non-nullable")
Throw New FaultException("...")
Catch ex As UpdateException When CType(ex.InnerException, SqlException).Number = SQLErrorNumbers.NullNotAllowed
Throw New FaultException("...")
End Try
Как мы должны различать InvalidOperationExceptions?
Есть ли список возможных InvalidOperationExceptions?
Можно ли получить доступ к защищенному HResult?
EDIT
Нет, я не говорю о «повторяющихся записях» InvalidOperationExceptions!
Я получаю исключение InvalidOperationException «Невозможно изменить отношение, поскольку одно или несколько свойств внешнего ключа не могут быть равны нулю ...».