문제

nhibernate (나의 면책 조항)를 처음 접했습니다. 나는 비슷하고 흥미로운 것을 발견했다 MVC에 관한 기사, 그러나 일반 웹 애플리케이션 내에서 nhibernate 세션을 관리하기위한 일반적인 모범 사례가 무엇인지 더 궁금합니다.

나는 만났다 프로젝트이지만, 나는 몇 가지 다른 방향이있는 것 같다는 것을 깨닫기 시작했습니다. 아마도 그것이 나의 최선의 이익이 아니라는 것을 알고 있습니다. 새로운 세션 기능을 만듭니다 데이터베이스를 터치해야 할 때마다 커뮤니티가 세션을 관리하기 위해하는 일에 관심이 있습니다. 버로우를 사용하십니까? 싱글 톤에서 세션을 포장합니까?

모든 방향이나 통찰력은 항상 대단히 감사합니다.

도움이 되었습니까?

해결책

귀하의 질문에 직접 답변하려면, 귀하의 ISessionFactory 객체는 싱글 톤이어야합니다. 이 프로그래밍 방식으로 (예 : C# 싱글 톤으로 감싸서) IOC 컨테이너에서 구성하여 수행 할 수 있습니다.

세션의 경우 Burrow는 좋아 보이지만 웹 애플리케이션에서 세션을위한 자손적이고 가장 간단한 패턴은 Nhibernate 2.0.0과 함께 제공됩니다. 즉, 데이터 액세스 코드 호출입니다 ISessionFactory.GetCurrentSession() 보다는 ISessionFactory.OpenSession(). 그런 다음 공장의 방법을 진술합니다 현재 세션 구현을 지정하여 관리합니다 ICurrentSessionContext. Nhibernate는 웹 요청과 함께 세션을 결성하기위한 두 가지 상자를 제공합니다. 이것을 문서에서 '문맥 세션'이라고합니다.

의심 할 여지없이보다 복잡한 웹 애플리케이션은 복잡한 게으른로드 등과의 지속적인 대화가 더 오래 지속될 수 있지만 표준 웹 애플리케이션의 경우 컨텍스트 세션이 충분해야합니다.

다른 팁

Nhibernate / Fluent nhibernate 데이터 액세스 패턴과 관련 하여이 주제에 대한 일련의 블로그 게시물을 썼습니다.

내가 추천하는 첫 번째는 nhibernate의 상호 작용을 추상적으로 떨어 뜨리는 것입니다.

일반적인 일반 및 확장 가능한 리포지토리 생성

그런 다음 세션 관리를 처리하기 위해 "비즈니스 대화 당 세션"패턴을 구현했습니다. NH 세션을 갖는 대신 단일 페이지 요청의 수명에 대해 공통적 인 일련의 이벤트에 존재하는 일련의 이벤트에 대해 양식으로 많은 편집을 한 다음 마지막에 모두 영구적으로 적용하거나 취소하십시오.

PostSharp 및 IOC를 사용하여 비즈니스 거래 당 대화

오늘이 게시물을 작성하려고한다면 PostSharp를 다시 사용하여 AP (Aspect Oriented Programming) 코드를 처리하지 않겠습니다. linfu.aop 또는 AOP 상호 작용을 수행하는 다른 프레임 워크.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top