2012-05-23 2 views
0

나는 데이터베이스에 연결하기 위해 NHibernate를 사용하는 데스크톱 애플리케이션을 작성 중이다.NHibernate에서 얼마나 많은 세션을 열어 둘 수 있습니까?

내 모델에는 모델이 초기화 될 때 열리고 모델이 폐기 될 때 닫히는 세션이 있습니다. 열려있는 세션 수가 열려있는 창 수와 동일하기 때문에 양식 당 하나의 모델 만 있으면 괜찮습니다. 적은 수입니다.

많은 모델이 나열된 양식을 만들고 있으므로 양식에 50 개의 모델이 나열되어 있으면 50 개의 열린 세션이 있습니다. 나는 이것이 문제가 될 수 있다고 생각한다.

NHibernate에 몇 개의 세션을 가질 수 있습니까? 적은 수를 사용해야합니까, 아니면 필요한만큼 열린 세션을 가질 수 있습니까?

답변

2

세션을 열어 둘 시간과 세션 수행 시간에 따라 다릅니다. 세션 자체는 매우 가볍기 때문에 반드시 데이터베이스에 대한 연결을 열지는 않습니다.

그러나 1 개의 형식으로 50 개의 세션을 열면 가장 좋은 디자인이라고 생각합니다. 당신이 무언가를하고 싶을 때 (예를 들어 어떤 데이터를 제시하거나 데이터를 업데이트하거나 실체를 나열 할 때), 세션을 열고, 일을하고, 일을하고 싶을 때 세션을 "작업 단위"로 사용할 것을 제안합니다. 그런 다음 세션을 폐기하십시오. 이로 인해 지연로드 및 데이터 바인딩과 관련된 일부 문제가 발생할 수 있지만 필요한 연관을 페치하여 해당 문제를 해결할 수 있습니다.

session.Lock (entity, LockMode.None)을 사용하여 한 세션에서로드 한 엔티티를 다른 세션에 다시 연결할 수 있으므로 사용자 상호 작용간에 세션을 열 필요가 없습니다.

+0

감사합니다. 처음에는 작업 단위 디자인이 있었지만이 기사를 읽은 후 변경하기 시작했습니다. http://msdn.microsoft.com/en-us/magazine/ee819139.aspx 그러나이 기사가 그래서 더 이상 좋지 않아, 나는 다시 바뀔지도 모른다. – Oliver

+0

나는 그 기사가 좋지 않다고 생각하지 않지만 당신의 필요에 달려있다. 앱에 50 개의 양식이 열려있는 경우 다른 방법이 필요합니다. 또한 양식이 열려있는 기간과 사용 방법에 따라 다릅니다. –

관련 문제