2011-03-24 8 views
1

내 ASP.NET MVC2 프로젝트에 문제가 있습니다. 저는 Fluent NHibernate를 ORM으로 사용하고 있습니다. 정말 좋아합니다. 내가 가진 문제는 캐싱 (나는 생각한다)이다. 예를 들어 컨트롤러를 통해 데이터베이스에서 아약스로 데이터를 가져 오는 JQuery DataTable이 있습니다. DataTable은 데이터베이스와 다른 것들을 나열합니다. 몇몇 게시물을 삭제하거나 추가하면, 호출이 이루어지고 NHibernate가해야 할 일을 수행한다고해도 데이터 해석기가 업데이트되는 것처럼 보입니다.Fluent NHibernate asp.net MVC 캐싱

데이터가 업데이트되어야합니다. 프로젝트를 다시 실행하면 (로컬로 프로그래밍), 때로는 그때까지도 작동합니다.

문제를 캐싱하고 있습니까? 그것은 NHibernate 캐시 또는 브라우저인가요?

+0

IE에서만 보입니까? 예를 들어 Firefox/Chrome에서 사용해보십시오. IE는 Ajax 요청을 매우 적극적으로 캐시합니다. 또한 게시물을 추가 한 후 데이터베이스를 확인하고 데이터가 업데이트되었는지 확인할 수 있습니다. – Swaff

+0

크롬과 FF로 보입니다. 문제는 응용 프로그램을 통하지 않고 데이터베이스에 직접 게시물을 추가하여 테스트하는 것입니다. 따라서 데이터베이스가 올바르게 업데이트됩니다. –

+0

nHibernate가 데이터를 볼 수 있도록하려면 응용 프로그램을 통해이 작업을 수행해야합니다. 그렇지 않으면 nHibernate에서 데이터를 사용할 수 없습니다. nHibernate가 데이터베이스로 되돌아 가도록 캐시를 Clear()시켜야한다. – Swaff

답변

2

데이터가 응용 프로그램을 통하지 않고 데이터베이스에서 업데이트되는 경우 nHibernate는 데이터에 대해 알지 못하며 List() 또는 Load()가 다시 쿼리하면 전체 데이터를 얻기 위해 데이터베이스로 돌아 가지 않습니다 데이터 세트. 이 테스트를 위해

  • 이 를 통해 테스트 단계에서
  • 또는 동안 nHibernate 수
  • 을 데이터베이스에 퍼팅 데이터의 일부 수단을 만들 가 호출되는 서비스 방법이 여기

    제안은 jQuery에 의해 매번 캐시를 비우십시오. 따라서 각 요청마다 을 사용하여 nHibernate를 다시 데이터베이스에 저장해야합니다.

이 작업은 ISession.Clear()를 사용하여 완전히 수행 할 수 있습니다. 또는 알려진 객체를 Evict()를 사용하여 제거 할 수 있습니다.

아니요 실제로는 go-live 옵션이긴하지만 nHibernate 캐싱 데이터를 가지고있는 것이 이점입니다.

+0

다른 응용 프로그램에서 데이터베이스를 업데이트하면 어떻게됩니까? 그렇다면 NHibernate는 그것에 대해 알지 못할 것입니다. 유일한 해결책은 캐시를 지우는 것입니다. –

+0

물론, 또는 각 요청 (http://ryanlanciaux.com/ryanlanciaux/post/NHibernate-Session-Per-Request.aspx) 신선한 잘라 내기를 얻을 수 있도록 HTTP 요청 기간 동안 만 nHibernate 세션을 지속 시키십시오. . – Swaff