nHibernate не может извлекать вручную измененные данные из таблицы репозитория? Я также отключил кеш второго уровня, но выглядит так (nhibernate) иногда извлекается из кеша, а иногда из таблицы репозитория.nHibernate не извлекает вручную измененные данные
ответ
Я думаю, что вам нужно будет немного описать вашу точную проблему, чтобы получить ответ; У меня есть некоторый минимальный опыт работы с nhibernate, но я действительно не могу повторить то, что происходит, и попытаться исправить его, скажем, некий код.
Srry за то, что слишком специфичны
Nhibernate является получение данных без каких-либо проблем. Но когда я вручную изменяю данные в таблице репозитория. Icriterea (nhibernate) иногда извлекает из кеша или из таблицы. Я использую Icriteria funcnality:
ICriteria criteria = session.CreateCriteria (typeof (xyzclass)); criteria.Add (Expression.Eq ("xyzclass", somestringto retreivedata)); criteria.SetCacheable (false); критерии возврата.UniqueResult();
Я никогда не использовал функции кэширования NHibernate из первых рук, но я считаю, что цель этого заключается в том, чтобы удалить необходимость вообще обращаться к базе данных, то есть не будет получать ручные изменения, потому что это не так Не знаю о них.
Я бы точно спросил, что именно вы пытаетесь достичь здесь, вы просто выполняете некоторые тесты, вручную редактируя базу данных или это будет регулярная деятельность в реальном приложении? Действительно, единственное, что нужно модифицировать в вашей базе данных, - это приложение, которое делает это через ваш уровень данных NHibernate, чтобы обновлять и/или загрязнять кеш в этом процессе.
Это всего лишь часть тестирования.
Но в будущем мы могли бы вручную отредактировать данные. Я также установил lazy в false для этой таблицы и прокомментировал все свойства кеша второго уровня, используемые hibernate. Но даже тогда он возвращает мне разные значения вместо недавно измененного значения. Иногда это дает мне старое значение, а иногда и новое, поэтому оно не является постоянным.
Я не знаю, будет ли это решить проблему вы имеете, но документация гласит:
Чтобы полностью выселить все объекты из кэша сеанса, вызовите ISession.Clear()
Для кэша второго уровня существуют методы, определенные в ISessionFactory для вытеснения кэшированного состояния экземпляра, всего класса, экземпляра коллекции или всей коллекции.
Если вы делали это каждый раз, когда вы делали что-то, что выполняет SELECT, данные могут изменить вне диапазона, он должен делать то, что вы хотите.
Существует два типа кэшей в nhibernate: сеансовые кэши и кэши второго уровня. Кэш сеанса всегда кэширует объекты, просматриваемые этим сеансом, так как nhibernate знает, какие объекты были изменены и которые необходимо сохранить. Кэш второго уровня, который вы отключили, ниже этого. Информация, которую вы видите в кеше, поступает из кеша сеанса.
Если ваше приложение должно видеть изменения, сохраняемые другими источниками (скажем, ручные изменения в базе данных), ответ, вероятно, заключается в создании сеансов с более тонкой детализацией. Хотя SessionFactory живет на всю жизнь вашего приложения, объект Session должен создаваться гораздо чаще. Например, в веб-приложении каждый запрос генерирует свой собственный сеанс.
Если это не вариант, session.Clear() вытеснит все объекты из сеанса.
Хорошая связь с NHibernate всегда зависит от сильной приверженности OO и в большинстве распространенных случаев зависит от исключительности данных. Если у вас его нет, вы увидите некоторые неприятные проблемы и откажетесь от большинства хороших вещей, которые может предложить NH.
Допустим, что существует класс под названием «Foo», сопоставленный с таблицей «Foo» с столбцами «Id» и «SomeProperty». Если все строки имеют «SomeProperty», обновленные вручную от «oldValue» до «newValue», и NH отправляет некоторый запрос в DB, запрашивающий все Foos, где SomeProperty = «newValue», DB возвращает все Foos, как и ожидалось. Но экземпляры Foo экземпляров NH могут иметь «oldValue», потому что Foo с возвращенным идентификатором уже был прикреплен к сеансу (другими словами, он был в кеше 1-го уровня).
Единственный короткий способ заставить NHibernate быть в курсе всех обновлений вручную, использует StatelessSesion, поэтому он не будет кэшировать экземпляры объектов и всегда будет предоставлять версию данных DB. Но если вы хотите применить это в транзакционной системе, это явный признак неуместного использования NH, и вы не получите большинство приятных функций NH.
- 1. DataTable извлекает измененные данные из строки
- 2. Динамическое обновление NHibernate не обновляет данные, измененные в перехватчике
- 3. $ _POST не извлекает данные?
- 4. objectlist не извлекает данные
- 5. getNamedQuery не извлекает данные
- 6. CreateSqlQuery не извлекает скалярное значение в NHibernate
- 7. Почему NHibernate извлекает больше данных, чем необходимо?
- 8. NHibernate вручную выборки управления
- 9. JPA не извлекает обновленные данные
- 10. StAX не извлекает данные атрибута
- 11. CakePHP3 «содержать» не извлекает данные
- 12. Mysqli не извлекает мои данные
- 13. Базовая коллекция не извлекает данные
- 14. HTTPService не извлекает текущие данные
- 15. Yii2-activedataprovider не извлекает данные
- 16. NHibernate Как добавить расширения вручную?
- 17. BizTalk вручную извлекает файл вместо опроса
- 18. javascript canvas putImageData не записывает измененные данные
- 19. Android Firebase извлекает данные
- 20. copy_from_user извлекает непредвиденные данные
- 21. Функция, которая возвращает измененные данные
- 22. как ehcache определяет «измененные данные»?
- 23. Исторические данные и измененные объекты
- 24. C# - Серверный сокет не извлекает данные
- 25. Sqlite не извлекает данные при применении условия
- 26. Ajax не извлекает данные каждые 5 секунд
- 27. MySQL result set не извлекает данные
- 28. Вложенная базовая модель не извлекает данные
- 29. Почему PHP не извлекает данные, отправленные AJAX?
- 30. Коллекция Backbone.js не извлекает данные из api
Не могли бы вы переписать заголовок вопроса, чтобы описать проблему более подробно, то есть что-то вроде «nHibernate не извлекает вручную измененные данные» – SCdF 2008-09-24 22:39:40