2009-11-23 3 views
0

클라이언트 서버 응용 프로그램이 있고 서버가 nhibernate를 사용합니다. 세션을 어떻게 사용해야합니까? 통화 당 ? 클라이언트 당 ? 싱글?nhibernate 세션의 올바른 사용

다른 방법으로?

어떻게 서버에서 세션 캐시를 유지할 수 있습니까? 또한 세션이 스레드 안전한지 알고 싶습니까?

답변

7

작업 단위당 하나의 세션을 사용해야합니다. 여러 작업이 포함되어 있다면 그렇게하십시오.

작업 단위를 랩핑하고 모든 항목이 완료되면 커미트하기 위해 session.BeginTransaction()을 사용하십시오.

세션은 스레드로부터 안전하지 않지만 세션 팩토리는 유지해야합니다.

Hiberate에는 데이터에 대한 다양한 캐시 옵션이 있지만 세션은 사용 및 폐기되어야합니다.

+0

세션 폐기 후 캐시를 유지할 수있는 방법이 있습니까? –

+1

Ayende는 캐싱이 NHibernate에서 구현되는 방법에 대한 몇 가지 좋은 링크를 가지고있다. 조회 테이블과 같은 읽기 전용 개체의 경우 자주 읽는다면 좋은 이점을 얻을 수 있습니다. 그렇지 않으면 동시성 요구 사항으로 인해 데이터가 캐시 된 상태로 유지되지 않을 수 있습니다. 그것의 종류에 따라 달라집니다. Ayende 기사는 http://ayende.com/Blog/archive/2009/04/24/nhibernate-2nd-level-cache.aspx입니다. –

1

1 회당 평균 솔루션이어야합니다.

3

일반적으로 요청 당 하나씩 처리됩니다. HttpApplication은 요청 시작시 세션을 열고 요청이 끝날 때 닫습니다 (example).

1

정말 세션 수명의 질문에 대한 정답은 없습니다. 세션 평생을 원하는대로 만들 수 있습니다. 세션은 스레드로부터 안전하지 않지만 세션 팩토리는 있습니다.

캐시를 유지하려면 세션을 계속 유지해야합니다. 단순한 단일 사용자, 단일 프로세스 응용 프로그램을 제외하고는 캐시를 유지하고 캐시를 올바르게 유지하는 것이 상당히 어려울 수 있습니다.

1

내가 사용했던 훌륭한 예가 NHibernate Best Practices입니다.

코드 예제에서는 ASP.NET 요청 당 세션을 사용합니다.