2012-05-11 2 views
0

я, кажется, что-то упустить здесь:NHibernate FlushMode.Commit авто сохраняет грязные объекты

У меня есть приложение, которое использует сессию в методе применения и использования отложенной загрузки.

Я установил сеанс FlushMode.Commit, и кажется, что NHibernate по-прежнему автоматически сохраняет мои грязные объекты в БД (SQLCe), хотя я никогда не начинаю транзакцию и не совершаю ее.

может ли кто-нибудь сказать мне, что я делаю неправильно?

часть моего кода:

public Repository(ISessionProvider sessionProvider) 
    { 
     _sessionProvider = sessionProvider; 
     _session = _sessionProvider.OpenSession(); 
     _session.FlushMode = FlushMode.Commit; 
    } 

    public IList<T> GetAll<T>() where T : class 
    { 
     var criteria = _session.CreateCriteria<T>(); 
     var list = criteria.List<T>(); 
     return list; 
    } 
+0

Неявные транзакции создаются, если вы не создаете их по коду, как можно было бы ожидать, что они также будут совершены автоматически. Используйте 'FlushMode.Never', если вам это не нужно. – Andreas

+1

также отмечают, что команда спящего режима (n) препятствует использованию сеанса для каждого приложения – Firo

+0

Хорошо, я думаю, что лучше всего сделать это, чтобы изменить способ работы с сеансом и сделать его более практичным с NH. спасибо :) –

ответ

0

Кажется, что у меня была другая нить, которая была промывочной той же сессии, когда я создавал грязный предмет в моем UI, я предполагаю, что это была просто ошибка в моем приложении ,

Работает отлично, все еще используя сеанс для каждого приложения, так как мне нужна функция Lazy.

+0

Поздравляю с этим! Когда вы в состоянии, пожалуйста, отметьте свой ответ как «принятый» (используя зеленую галочку), чтобы другие участники сообщества могли узнать о вашем успехе. Приветствия ~ –