NHibernate 3.0: TransactionScope и Auto-Flushing

В 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();
}

(Пример, бессовестно украденный из , этот связанный вопрос )

Я вижу, что в исходном коде NHibernate проверяется, выполняется ли транзакция (в SessionImpl.AutoFlushIfRequired ), но соответствующий метод ( SessionImpl.TransactionInProgress ) не учитывает внешние транзакции - в отличие от своего кузена ConnectionManager.IsInActiveTransaction , который учитывает внешние транзакции. 11139372]

6
задан Community 23 May 2017 в 10:28
поделиться