Как обрабатывать самопроверяющиеся объекты InvalidOperationException - PullRequest
1 голос
/ 06 октября 2011

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 «Невозможно изменить отношение, поскольку одно или несколько свойств внешнего ключа не могут быть равны нулю ...».

1 Ответ

0 голосов
/ 14 октября 2012

Кажется, нет никакого способа обойти некрасивую обработку исключений с помощью STE.

...