Как лучше всего обрабатывать исключения в NHibernate?
У меня есть SubjectRepository со следующим:
public void Add(Subject subject)
{
using (ISession session = HibernateUtil.CurrentSession)
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(subject);
transaction.Commit();
}
}
И юнит-тесты следующим образом:
[Test]
public void TestSaveDuplicate()
{
var subject = new Subject
{
Code = "En",
Name = "English"
};
_subjectRepository.Add(subject);
var duplicateSubject = new Subject
{
Code = "En",
Name = "English1"
};
_subjectRepository.Add(duplicateSubject);
}
Я дошел до того, что обработал ошибку, сгенерированную модульным тестом, и немного застрял. Это терпит неудачу, как и ожидалось, хотя с GenericADOException я ожидал ConstraintViolationException или что-то подобное (есть ограничение уникальности для кода субъекта на уровне базы данных).
ADOException оборачивает MySQL Exception, у которого есть разумное сообщение об ошибке, но я не хочу начинать нарушать инкапсуляцию, просто выбрасывая внутреннее исключение. Тем более, что MySQL не является финальной частью этого проекта.
В идеале я хотел бы иметь возможность перехватить исключение и вернуть пользователю ощутимую ошибку на данном этапе. Существуют ли документированные подходы к наилучшей практике обработки исключений NHibernate и создания отчетов для пользователя о том, что пошло не так и почему?
Спасибо
Мэтт