현재 작업중인 MVC 3 프로젝트는 현재 세션이 끝날 때마다 삽입/업데이트 호출을 커밋/롤백합니다. 이것은 여러 삽입 작업을 수행하는 경우를 제외하고는 대부분의 경우에 잘 작동합니다.다중 삽입을 막는 NHibernate 세션/트랜잭션
csv가 사이트에 업로드되면 각 레코드가 구문 분석되어 DB에 삽입됩니다. "
don't flush the Session after an exception occurs
은 어떻게 요청 당 세션을 해제 할 수 있습니다 (또는 내가해야합니까 : 하나 개의 레코드 삽입 실패 할 경우 문제는, 이전의 모든 기록은 롤백 취득하고, 이후의 모든 시도는 오류와 함께 실패 트랜잭션을 다시 시작하십시오)?
편집 : 자세한 사항
요청 물건 당 세션이 IHttpModule을 구현하는 클래스로 구성되어 있습니다. 이 클래스는 HttpApplication 컨텍스트와 UnitOfWork 클래스를 사용합니다. 이것은 커밋과 롤백이 발생하는 곳입니다.
위에서 언급 한 UnitOfWork는 StructureMap을 사용하여 리포지토리에 주입됩니다.
내가 말했듯이,이 동작은 나머지 사이트의 99 %에서 유효합니다.이 대량 업데이트를 통해 세션 당 요청 트랜잭션을 무시하면됩니다. 또는 각각의 새 레코드에 대해 트랜잭션을 수동으로 다시 시작해야합니다. 나는 방법을 모른다.
이 문제가 "자동"아닙니다, 어딘가에 당신이 예외를 캐치해야 다시 세션을 압연. Global.asax를 살펴볼 수 있습니까? –
위의 내용을 추가했습니다. – getit
현재 세션의 인스턴스를 검색 할 수 있습니까? 그렇다면 그것을 사용하여 새 트랜잭션을 생성하고 '사용'하고 업데이트를 수행하십시오. 예외를 HttpModule에 잡히지 않으므로 try/catch로 처리하면 문제가 없습니다. –