1

이 게시물은 중복되어 있지만 내 문맥은 다릅니다. here에서이 문제의 해결 방법을 살펴 보았습니다. 다음과 같이 나는 어떤 방법 변경 : 나는 위와 같이 구현하는 경우동일한 키를 가진 항목이 이미 추가되었습니다. 다음과 같은 방법으로 올바른가요?

private static Mutex _sessionMutex = new Mutex(); 
    public void OpenMySessionFactory(string conStr) 
     { 
      try 
      { 
       _sessionMutex.WaitOne(); 
       config = Fluently.Configure() 
       .Database(MySQLConfiguration.Standard.ConnectionString(conStr)) 
       .Mappings(m => m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly())) 
       .BuildConfiguration(); 
       sessionFactory = config.BuildSessionFactory(); 
       _sessionMutex.ReleaseMutex(); 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 

어떤 영향이 있습니까? 오류 뒤에

이유 :

동일한 키를 가진 항목이 이미 내가 유창함 자 NHibernate를 사용하여 데이터에 액세스 할 수있는 뭔가를하고있는 모든 버튼을 두 번 클릭 할 때

가 발생하는되어 추가되었습니다

.

답변

0

예외가 발생하면 뮤텍스를 잠금 해제하지 않습니다 (컨트롤이 catch 블록으로 점프하고 잠금 해제를 건너 뜁니다). finally 블록을 사용하여 이렇게하세요.

public void OpenMySessionFactory(string conStr) 
{ 
    _sessionMutex.WaitOne(); 
    try 
    { 
     config = Fluently.Configure() 
     .Database(MySQLConfiguration.Standard.ConnectionString(conStr)) 
     .Mappings(m => m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly())) 
     .BuildConfiguration(); 
     sessionFactory = config.BuildSessionFactory(); 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
    finally 
    { 
     _sessionMutex.ReleaseMutex(); 
    } 
}