Castle NHibernate ファシリティを AutoTx ファシリティで使用しようとしています。テストとして、トランザクションがロールバックされることを確認するために、サービスの途中で例外をスローしています。ただし、データは引き続きデータベースに保持されます。
IActivityService
TransactionAttribute を使用した私のサービス インターフェイス:
public interface IActivityService
{
[Transaction]
Activity CreateActivity(Activity activity);
}
の実装CreateActivity
。AddActivity
追加されたデータがロールバックされることを期待して、ここで例外をスローしています。
public virtual Activity CreateActivity(Activity activity)
{
activityDAO.AddActivity(activity);
throw new Exception("This should rollback the transaction");
return activity;
}
の実装AddActivity
。SessionManager
注入されISessionManager
た です。
public void AddActivity(Activity activity)
{
using (ISession session = SessionManager.OpenSession())
{
session.Save(activity);
}
}
最後に、windsor コンテナーを構成する方法を次に示します。これは、流暢な nhibernate 構成がスワップインされた、ガイドNHibernateInstaller
からそのままです。
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);
構成はかなり単純に見えましたが、何が欠けているのかわかりません。助けてくれてありがとう。