2011-03-09 5 views
1

팀에서 진행중인 프로젝트에는 특정 테이블의 모든 엔티티를 반복하고 몇 가지 규칙에 따라 필드를 업데이트하는 Windows 서비스가 있습니다. 한정된. ORM 도구로 NHibernate를 사용합니다. 현재 우리는 전체 프로세스에 대해 하나의 세션과 하나의 트랜잭션을 엽니 다. 즉, 모든 엔티티가 처리 된 후에 트랜잭션이 커밋됩니다. 나는이 접근법이 좋지 않다고 생각하고 좀 더 많은 의견을 듣고 싶었습니다 : 현재의 세션 관리 방식을 유지해야합니까 아니면 다른 접근 방식으로 이동해야합니까?많은 엔티티를 처리 할 때 세션/트랜잭션 수명을 관리하는 방법

하나의 옵션은 엔티티 당 트랜잭션을 여는 것이고, 또 다른 제안은 각 엔티티에 대해 새 세션을 여는 것입니다. 가장 효과가 있다고 생각하는 접근 방식은 무엇입니까?

답변

2

한 가지 방법은 없습니다. 그것은 모두 특정한 경우에 달려 있습니다.

내가 작업하고있는 앱에는 세 가지 접근 방식의 예가 나와 있으며, 각 방식을 선택해야하는 이유가 있습니다. 예를 들어 :

  • 전체 프로세스는 트랜잭션 원 자성이 있어야합니다 : 프로세스가 공통 데이터를 많이 가지고 있지만, "마스터"테이블의 각 레코드가 작업의 단위로 간주 할 수있는 단일 트랜잭션을
  • 을 사용합니다 : 단일 세션, 다중 트랜잭션 사용
  • 마스터 테이블의 각 레코드 처리 (오류 처리 포함) : 레코드 당 세션 사용
관련 문제