2009-11-10 5 views
9

이것은 웹 애플리케이션에서 NHibernate를 사용할 때 매우 근본적인 질문이지만, 웹을 검색 할 때 어떤 모범 사례도 동의하지 않습니다. 나는 많은 다른 장소에서 그것을 보았습니다 :웹 응용 프로그램 (특히 MVC)에서 NHibernate Session을 열고 닫을 위치는 어디입니까?

리포지토리 방법에서 생성되고 폐기되었습니다. 이것은 객체가 이미 분리되어있을 때부터 나에게 어리석은 것처럼 보입니다.

컨트롤러 동작 시작 및 끝 부분 -이 방법이 더 좋지만 각 동작마다 성가신 일이 필요합니다. Global.asax에의 beginrequest의 응용 프로그램 수준에서

및 EndRequest 이벤트 - 이것은 좋은 생각을 것 같다, 그러나 다시, 나는 초기화에서 작성하는 대신 beginrequest (예를 들어 날카로운 아키텍처)의 예 본 적이 - 나는 비록을 왜 그런지 모르겠다.

어쩌면 다른 접근법이 있을까요?
IoC 컨테이너가 어떤 식 으로든 여기에서 도움이 될 수 있습니까?
어쩌면 당신은 이것에 관해 웹상의 훌륭한 자료를 알고있을 것입니다.
그리고 어떤 방법을 사용합니까?

감사

+0

샤프 아키텍쳐가 왜 IIS7에서 기억하고 있는지 설명합니다. – queen3

+0

코드 주석에 "IIS7의 문제로 인해 NHibernate 초기화가 Init()에서 발생해야합니다."하지만 문제가 무엇인지 알지 못합니다. – UpTheCreek

답변

0

나는 몇 가지 예 초기화에서 작성하는 대신 beginrequest의 (예를 들어 날카로운 아키텍처) 본 적이 - 나는 이유는 확실하지 않지만.

IIS 7에서 Global.asax의 Init 이벤트에서 세션 상태에 액세스 할 수 있습니다. 그래서 날카로운 아치가 beginrequest를 사용합니다.

세션 관리에 관해서는 당신에게 동의합니다. Global.asax가 최고의 장소입니다. 이벤트를 레이어간에 명확하게 구분하고 UI에서 DAL 설정을 제거하려면 HttpModule을 사용할 수 있습니다.

또한 ayende's blog을 살펴볼 수 있습니다. 세션 관리 방식에 대해 설명합니다.

+0

안녕하세요,하지만 왜 ASP.NET 세션 상태를 사용해야합니까? Application_Start에 넣지 않는 이유는 무엇입니까? – UpTheCreek

+0

NHibernate의 Session을 저장하려면 세션 상태가 필요합니다. ApplicationStart에 액세스 할 수 없기 때문에 ApplicationStart에서 수행 할 수 있습니다. SessionFactory를 넣기 위해 필요합니다. – Sly

+0

대부분의 솔루션은 세션 상태 (HttpContext.Items 또는 정적 멤버)를 사용하지 않습니다. – UpTheCreek

관련 문제