2009-09-15 5 views
3

NHibernate에 새로 추가되었습니다 (고지 사항). 비슷하고 흥미로운 article regarding MVC을 보았습니다. 그러나 일반 웹 애플리케이션 내에서 NHibernate 세션을 관리하기위한 일반적인 모범 사례가 무엇인지 궁금합니다.FluentNHibernate ASP.NET의 세션 관리

나는 Burrow 프로젝트를 보았지만 몇 가지 방향이 있다는 것을 깨닫기 시작했습니다. 내가 데이터베이스를 만질 필요가있을 때마다 create a new SessionFactory에 관심이 없다는 것을 알고 있습니다. 그래서 커뮤니티가 세션을 관리하는 것에 관심이 있습니다. 버로우를 사용합니까? SessionFactory를 싱글 톤으로 포장합니까?

모든 방향이나 통찰력은 항상 높이 평가됩니다.

답변

5

질문에 직접 대답하려면 ISessionFactory 개체가 싱글 톤이어야합니다. 프로그래밍 방식으로 (즉, C# 싱글 톤으로 래핑하여) 또는 IoC 컨테이너에서 구성하여이 작업을 수행 할 수 있습니다.

세션의 경우 Burrow는 좋아 보이지만 웹 응용 프로그램의 세션에 대한 가장 독창적이며 간단한 패턴 인 OpenSessionInView는 NHibernate 2.0.0에서 기본적으로 제공됩니다. 즉, 데이터 액세스 코드는 ISessionFactory.OpenSession() 대신 ISessionFactory.GetCurrentSession()을 호출합니다. 그런 다음 공장의 현재 세션의 구현이 ICurrentSessionContext의 구현을 지정하여 관리되는 방법을 설명합니다. NHibernate는 웹 요청으로 세션을 정렬하기위한 두 가지 기본 패키지를 제공합니다. 이것은 문서에서 '문맥 세션'이라고합니다.

더 복잡한 웹 응용 프로그램은 복잡한 지연로드 등으로 더 오래 지속되는 대화를 필요로하지만, 표준 웹 응용 프로그램에 대해서는 NHibernate 문맥 세션으로 충분할 것입니다.

2

NHibernate/Fluent NHibernate 데이터 액세스 패턴과 관련된이 주제에 대한 일련의 블로그 게시물을 작성했습니다.

처음 나는 NHibernate의 상호 작용을 추상화하는 것이 좋습니다.

Creating a common generic and extensible NHiberate Repository

그런 다음 세션 관리를 처리하기 위해 내가 대신 NH 세션을 가진의는 일련의 존재하는 공통의 하나 인 단일 페이지 요청의 삶을 위해 존재하는 "비즈니스 회화 당 세션"패턴을 구현 이벤트 중 하나를 사용하면 양식을 여러 번 편집 한 다음 끝에 모두 영구 적용하거나 취소 할 수 있습니다. 오늘이 게시물을 작성하려고 한 경우

Conversation Per Business Transaction using PostSharp and IoC

, 나는 AOP (가로 지향 프로그래밍) 나는 Linfu.AOP를 사용하는 것 중 하나를 내 프로젝트에서 코드 나 할 수있는 또 다른 프레임 워크를 처리하기 위해 다시 PostSharp를 사용하지 것이다 AOP 상호 작용

+0

'일반적인 일반적이고 확장 가능한 NHiberate 저장소 만들기'는 좋은 읽을 거리였습니다. –

+0

의견에 감사드립니다, Ben 감사합니다! –