В 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 я вижу, что он проверяет, выполняется ли транзакция (в SessionImpl.AutoFlushIfRequired
), но соответствующий метод (SessionImpl.TransactionInProgress
) не учитывает окружающие транзакции - в отличие от его двоюродного брата ConnectionManager.IsInActiveTransaction
, который учитывает окружающие транзакции.