2012-04-05 2 views
4

큰 테이블로 데이터를 가져올 때 문제가 발생합니다. 가져 오기가 완료 될 때까지 전체 웹 사이트가 다운됩니다. 삽입/업데이트 프로세스가 완료되는 데 최대 3 시간이 걸릴 수 있습니다. 또한 어떤 이유로 인해 예외가 발생하면 응용 프로그램 풀이 다시 시작될 때까지 테이블이 무기한으로 잠긴 상태로 유지됩니다.Fluent NHibernate에서 잠금을 해제하는 방법?

나는 무슨 일이 일어나고 있는지 조사했다. 이 프로세스가 완료 될 때까지 터치 된 테이블이 잠긴 것 같습니다. 이것이 직접 SQL 쿼리라면, "with (NOLOCK)"을 쿼리에 추가하여 문제를 해결할 것입니다. 그러나 Fluent NHibernate가 생성 한 쿼리에이를 추가하는 방법을 알 수는 없습니다.

또한 세션 설정 팩토리를 빌드 할 때 기본적으로 모든 쿼리에 "with (NOLOCK)"을 설정하는 방법이 있습니까? 사전에

감사합니다.

+0

lockmode를 설정해야합니다. http://stackoverflow.com/questions/1302746/how-do-add-nolock-with-nhibernate – rie819

+0

무국적 세션을 사용하고 있습니까 ?? 이것은 도움이 될 수 있습니다. http://davybrion.com/blog/2008/10/bulk-data-operations-with-nhibernates-stateless-sessions/ – CrazyCoderz

+0

다음은 SQL 인터셉터를 사용하여 작성한 나의 해결책입니다. http://stackoverflow.com/questions/1302746/how-do-add-nolock-with-nhibernate/39518098#39518098 –

답변

7

세션 또는 상태 비 저장 세션을 열 때 IsolationLevel.ReadUncomitted를 사용하여 트랜잭션을 시작하십시오. 이는 해당 트랜잭션의 모든 명령.에 대해 NOLOCK을 지정하는 것과 같습니다.

using (var session = _sessionFactory.OpenSession()) 
using (var transaction = session.BeginTransaction(IsolationLevel.ReadUncommitted)) 
{ 
    // do work 

    transaction.Commit(); 
} 
+1

매트,이 솔루션을 이용해 주셔서 감사합니다. 나는 트릭을하기 때문에 해결책으로 표시하고있다. 내가 찾은 해결책은 "SetLockMode (LockMode.None)"을 NHibernate 쿼리에 추가하는 것이었다. –

관련 문제