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 Exceptions を処理し、何が問題で、その理由をユーザーに報告するための文書化されたベスト プラクティス アプローチはありますか?
ありがとう、
マット