Обработка исключений NHibernate

Не уверен, почему вы используете nav-item здесь, но если вы хотите использовать класс btn-outline-secondary, то вам нужно также добавить класс btn, см. Здесь

[118 ]

6
задан 9 April 2009 в 22:33
поделиться

4 ответа

Я бы обработайте его в методе Add следующим образом:

public void Add(Subject subject)
{
    using (ISession session = HibernateUtil.CurrentSession)
    using (ITransaction transaction = session.BeginTransaction())
    {
        try
        {
            session.Save(subject);
            transaction.Commit();
        }
        catch (Exception ex)
        {
            transaction.Rollback();
            // log exception
            throw;
        }
    }
}

В блоке catch вы должны сначала откатить транзакцию и зарегистрировать исключение. Тогда ваши варианты:

  1. Rethrow то же исключение, это то, что делает моя версия
  2. Оберните его в свое собственное исключение и выбросьте его
  3. Проглотите исключение, ничего не делая, что очень редко бывает хорошей идеей

У вас нет реальных вариантов обработки исключения в этом методе. Предполагая, что пользовательский интерфейс вызывает этот метод, он должен вызывать его в своем собственном try..catch и обрабатывать его, отображая значимое сообщение об ошибке для пользователя. Вы можете выполнить свой модульный тест с помощью атрибута ExpectedException (type).

Чтобы ответить на ваш вопрос напрямую, вы должны создать свою собственную «разумную ошибку», расширив Exception, и выбросить ее с исходным исключением в качестве InnerException. Это техника исключения, которую я перечислил в (2).

У этого метода нет реальных вариантов обработки исключения. Предполагая, что пользовательский интерфейс вызывает этот метод, он должен вызывать его в своем собственном try..catch и обрабатывать его, отображая значимое сообщение об ошибке для пользователя. Вы можете выполнить свой модульный тест с помощью атрибута ExpectedException (type).

Чтобы ответить на ваш вопрос напрямую, вы должны создать свою собственную «разумную ошибку», расширив Exception, и выбросить ее с исходным исключением в качестве InnerException. Это техника исключения, которую я перечислил в (2).

У этого метода нет реальных вариантов обработки исключения. Предполагая, что пользовательский интерфейс вызывает этот метод, он должен вызывать его в своем собственном try..catch и обрабатывать его, отображая значимое сообщение об ошибке для пользователя. Вы можете выполнить свой модульный тест с помощью атрибута ExpectedException (type).

Чтобы ответить на ваш вопрос напрямую, вы должны создать свою собственную «разумную ошибку», расширив Exception, и выбросить ее с исходным исключением в качестве InnerException. Это техника исключения, которую я перечислил в (2).

Чтобы ответить на ваш вопрос напрямую, вы должны создать свою «разумную ошибку», расширив Exception, и выбросить ее с исходным исключением в качестве InnerException. Это техника исключения, которую я перечислил в (2).

Чтобы ответить на ваш вопрос напрямую, вы должны создать свою «разумную ошибку», расширив Exception, и выбросить ее с исходным исключением в качестве InnerException. Это техника исключения, которую я перечислил в (2).

13
ответ дан 8 December 2019 в 13:49
поделиться

Все исключения Nhibernate не подлежат восстановлению, вы можете вернуться к дизайну слоя приложения / данных, если вы пытаетесь восстановить из исключений nhibernate. Вы также можете взглянуть на реализацию перевода исключений в Spring.net Также ручная обработка транзакций для исключений утомительна и подвержена ошибкам, взгляните на контекстные сеансы nhibernate . Spring.net также имеет несколько хороших помощников в nhibernate.

2
ответ дан 8 December 2019 в 13:49
поделиться

Общий вопрос будет таким: что вы хотите сказать пользователю и кто является пользователем?

Если пользователь иногда будет другим компьютером (т. Е. Это веб-служба), то вы бы Вы хотите использовать соответствующий механизм для возврата ошибки SOAP или HTTP.

Если пользователь иногда будет каким-либо пользовательским интерфейсом, то вы можете захотеть отобразить сообщение для пользователя, но что бы вы сказали ему так он может что-то с этим сделать? Например, большинство веб-сайтов скажут: «Извините, у нас произошла непредвиденная ошибка», независимо от причины. Это потому, что обычно пользователь ничего не может сделать с ошибкой.

Но в любом случае выбор способа сказать «пользователь» зависит от уровня представления (уровня пользовательского интерфейса), а не от DAL. Возможно, вы должны обернуть исключения из DAL в другой тип исключения, но только если вы собираетесь изменить сообщение. Вам не нужен ваш собственный класс исключений, если только ваши абоненты не сделают что-то другое, если это исключение доступа к данным, а не какой-то другой тип.

1
ответ дан 8 December 2019 в 13:49
поделиться

Я бы, вероятно, проверил ввод перед сохранением объекта; таким образом вы можете реализовать любую проверку, которая вам нравится (например, проверить длину кода субъекта, а также тот факт, что нет никаких дубликатов), и передать пользователю значимые ошибки проверки.

Логика следующая. следует; исключения используются для обозначения исключительных обстоятельств, которые ваша программа не обслуживает. Пользователь, вводящий повторяющийся код темы в приведенном выше примере, - это то, что ваша программа должна учитывать; поэтому, вместо того, чтобы обрабатывать исключение из-за нарушения ограничения БД (что является исключительным событием и не должно происходить), вам нужно сначала обработать этот сценарий и пытаться сохранить данные только тогда, когда вы знаете, что данные, которые вы Сохраняем правильно.

1
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: