NHibernate dialect에 대한 사용자 정의 예외를 등록해야합니다. 내가 NHibernate 테스트에 표시된대로 구현 및 등록 된 ISqlExceptionConverter. 그러나 코드에서 예외가 발생하면 변환되지 않습니다. 내 전환 코드 도 호출하지 않습니다.NHibernate를 사용하는 사용자 정의 예외 ISqlExceptionConverter
내 코드는 정말 간단하다 :
try
{
using (ISession sess = OpenSession())
using (ITransaction tx = sess.BeginTransaction())
{
....
sess.Save(obj); // invalid object scheduled for inserting
.....
tx.Commit(); // exception raises here
}
}
catch (UniquenessViolationException ex)
{
// never came here, since exception was not converted and is of type
HibernateException
}
내 ISqlExceptionConverter 구현 :
public class SqlExceptionConverter : ISQLExceptionConverter
{
public Exception Convert(AdoExceptionContextInfo exInfo)
{
var sqlEx = ADOExceptionHelper.ExtractDbException
(exInfo.SqlException) as SqlException;
if (sqlEx != null)
{
if (sqlEx.Number == 2627)
return new UniquenessViolationException(exInfo.Message, sqlEx,
exInfo.Sql);
}
return SQLStateConverter.HandledNonSpecificException
(exInfo.SqlException, exInfo.Message, exInfo.Sql);
}
어쩌면 내가 뭔가를 놓친?
나는 단위 테스트에서 스택을 예외로 설정하려고하는 것과 비슷한 문제를 겪었습니다. Session.Flush에 대한 호출은 네이티브 OracleException을 던지고 등록 된 변환기 클래스를 실행하지 않습니다. –