2009-11-30 3 views
0

У меня есть служба, которую я пытаюсь переместить в NHibernate.Ошибка кэширования NHibernate

Theres a Get метод, который вызывается с помощью кнопки отмены на экране. При первом вызове метода Get (первый раз, когда я отменяю изменение) отмена фактически происходит, и значение возвращается.

Во второй раз, когда я отменяю, он просто игнорирует отмену и сохраняет новое значение ?!

private ISession _session; 

    private ISession GetSession() 
    { 
     return _session ?? (_session = _sessionFactory.OpenSession()); 
    } 

    public MappingCollection Get(string id) 
    { 
     var session = GetSession(); 
     var mappingCollection = session.Get<MappingCollection>(id); 
     return mappingCollection; 
    } 

Однако если изменить Get (идентификатор строки), чтобы включить обновление ...

public MappingCollection Get(string id) 
    { 
     var session = GetSession(); 
     var mappingCollection = session.Get<MappingCollection>(id); 
     session.Refresh(mappingCollection); 
     return mappingCollection; 
    } 

Все работает - но, глядя с NHibernate Profiler он называет выбор дважды на первой операции .. Я знаю, что я мог бы добавить bool, чтобы убедиться, что он запущен, но я надеюсь, что это лучший способ!

Помогите пожалуйста? Thanks

ответ

0

Вы убиваете свой веб-прокси при каждой попытке отмены? Это звучит как проблема с одним сеансом за запрос.

И должно иметь смысл, что вторая версия запускается дважды. Сначала вы получаете предмет. Затем вы обновите элемент. Это приведет к вызову в хранилище данных для проверки изменений.

+0

нет, я поддерживаю сеанс для ленивой загрузки. Его первая операция запускается дважды, поскольку она загружает ее в кеш и обновляет ее. –