在 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 异常,但我不想通过抛出内部异常来开始破坏封装。特别是 MySQL 尚未最终确定为该项目的后端。
理想情况下,我希望此时能够捕获异常并向用户返回一个合理的错误。是否有任何记录在案的最佳实践方法来处理 NHibernate 异常并向用户报告出了什么问题以及为什么?
谢谢,
马特