ASP.NET의 FluentNHibernate 세션 관리
-
07-07-2019 - |
문제
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 상호 작용을 수행하는 다른 프레임 워크.