나는 자 NHibernate를 사용하여 시스템 일하고, 나는 예외 catch 블록에서 다음 두 줄을 많이 참조 :nhibernate RollbackTransaction 및 롤백 후 세션을 처리하는 이유는 무엇입니까?
session.Flush();
session.RollbackTransaction();
내가 정말이 논리에 의해 혼란 스러워요, 그것은 변화를 플러시하는 불필요한 작업처럼 보이는을 트랜잭션 롤백 사례를 사용하십시오.
이러한 플러시 호출을 제거하고 RollbackTransaction 메서드에만 의존하기 위해 인수를 설정하려고했지만이 부분은 question에 도달했습니다. 다음으로 나는 링크 된 문서를 더 읽고, 다음 정보를 참조하십시오.
트랜잭션을 롤백하는 경우, 즉시 현재 세션을 닫고 버려서 NHibernate의 내부 상태가 일관성을 유지하는지 확인해야합니다.
이것은 무엇을 의미합니까? 우리는 현재 세션 수명 시간을 웹 요청의 시작과 끝 작업과 짝을 이루기 때문에 롤백을 호출하는 이유는 세션을 유효한 상태로 유지하는 것입니다.
아이디어가 있으십니까?
한 가지는 분명합니다. 롤백하기 전에 플러시를 호출하는 것이 중복됩니다. 코드에서 어디에서나 사용된다는 사실은 사실을 바꾸지 않습니다. 또한 doc-rollback에 설명 된대로 즉시 세션이 끝나야합니다.그래서 우리는 웹에서 글쓰기와 읽기를위한 특별한 요청을해야합니다. 쓰기 작업/요청/작업 단위의 일부가 실패한 경우 - 롤백, 오류 메시지 반환, 세션 종료 ... –