NHibernate がアンビエント トランザクションをサポートしていることは知っています。これは、NHibernate セッションがトランザクション スコープ内にある間、アンビエント トランザクションに参加するためです。ただし、いくつかの奇妙な点があります。次のテストを検討してください。
[Test]
public void Transaction_RollsBackTransactionInsideOfAmbientTransaction_AmbientTransactionAborted()
{
// arrange
ISessionFactory sessionFactory = SessionFactoryOneTimeInitializer.GetTestSessionFactory();
ISession session = sessionFactory.OpenSession();
SessionFactoryOneTimeInitializer.CreateDataBaseSchemaIfRequiredByConfiguration(session);
using (new TransactionScope())
{
using (ITransaction transaction = session.BeginTransaction())
{
// act
transaction.Rollback();
}
// assert
Assert.AreEqual(TransactionStatus.Aborted, Transaction.Current.TransactionInformation.Status);
}
}
このテストは失敗します。アンビエント トランザクションがデータベースに永続化されないことを NHibernate はどのように保証しますか?