NHibernate 3.0ではFlushMode.Auto
、アンビエントトランザクションのみで実行されている場合(つまり、NHibernateトランザクションを開始しない場合)は機能しません。それが必要ですか?
using (TransactionScope scope = new TransactionScope())
{
ISession session = sessionFactory.OpenSession();
MappedEntity entity = new MappedEntity() { Name = "Entity", Value = 20 };
session.Save(entity);
entity.Value = 30;
session.SaveOrUpdate(entity);
// This returns one entity, when it should return none
var list = session.
CreateQuery("from MappedEntity where Value = 20").
List<MappedEntity>();
}
(この関連する質問から恥知らずに盗まれた例)
NHibernateのソースでは、進行中のトランザクションがあるかどうかをチェックしていることがわかります(in SessionImpl.AutoFlushIfRequired
)が、関連するメソッド( )はアンビエントトランザクションを考慮しませSessionImpl.TransactionInProgress
ん-いとこConnectionManager.IsInActiveTransaction
はアンビエントトランザクションを考慮します。