Castle NHibernate Facility을 AutoTx Facility와 함께 사용하려고합니다. 테스트로서 트랜잭션이 롤백되는지 확인하기 위해 서비스 도중에 예외가 발생합니다. 그러나 데이터는 여전히 데이터베이스에 유지됩니다.Castle AutoTx Facility와 NHibernate Facility를 사용한 트랜잭션
내 서비스 인터페이스, IActivityService
TransactionAttribute를 사용하여 : CreateActivity
의
public interface IActivityService
{
[Transaction]
Activity CreateActivity(Activity activity);
}
구현합니다. 나는 롤백 AddActivity
에서 추가 데이터를 예상하고, 여기에 예외를 발생 해요 : AddActivity
의
public virtual Activity CreateActivity(Activity activity)
{
activityDAO.AddActivity(activity);
throw new Exception("This should rollback the transaction");
return activity;
}
구현. SessionManager
은 주사 된 ISessionManager
입니다.
public void AddActivity(Activity activity)
{
using (ISession session = SessionManager.OpenSession())
{
session.Save(activity);
}
}
마지막으로 윈저 컨테이너를 구성하는 방법은 다음과 같습니다. 구성은 매우 간단 보였다
container = new WindsorContainer().Install(FromAssembly.This());
// set up ISessionManager injection for DAOs
container
.AddFacility<AutoTxFacility>()
.Register(Component
.For<INHibernateInstaller>()
.ImplementedBy<NHibernateInstaller>()
.LifeStyle.Singleton)
.AddFacility<NHibernateFacility>(f =>
f.DefaultLifeStyle = DefaultSessionLifeStyleOption.SessionPerWebRequest);
,하지만 난 내가 부족 알아낼 수 없습니다 내 능통 자 NHibernate 구성에서 교체와 NHibernateInstaller
는 바로 the guide에서입니다. 어떤 도움을 주셔서 감사합니다.
아, 네가 두 번 맞았다. 고마워! 설치 프로그램을 호출하기 전에 설비를 추가해야했고'[Transaction]'을 구현해야했습니다. 단지 부수적 인,'[Transactional]'속성은 더 이상 사용되지 않습니다 (Castle.Services.Transaction.3.0.202.2202를 실행 중입니다). 그것은 그것없이 잘 작동합니다. – Will