Я пытаюсь использовать Castle NHibernate Facility с AutoTx Facility. В качестве теста я выбрасываю исключение в середине моего сервиса, чтобы убедиться, что транзакция откатывается. Однако данные все еще сохраняются в базе данных.
Мой сервисный интерфейс, 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);
}
}
Наконец, вот как я настраиваю виндзорский контейнер. NHibernateInstaller
является прямым от руководства , с моей свободной конфигурацией nhibernate, замененной на:
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);
Конфигурация казалась довольно простой, но я не могу понять, чего мне не хватает. Спасибо за любую помощь.