2010-07-25 3 views
0

FindAllByProperty을 호출하면 성 능동적 인 레코드에서 OnUpdate이 호출됩니다. OnUpdate 인스턴스에서 중복 확인을 수행하기 때문에 스택 오버플로가 발생합니다. 다음 코드를 고려하십시오. 왜 전화가 OnUpdate입니까? 어떻게 그걸 막을 수 있니?캐슬 액티브 레코드의`FindAllByProperty`가 왜`OnUpdate`를 호출합니까?

protected override void OnUpdate() 
{ 
    if (FindAllByProperty("Title", this.Title).Length > 1) 
     throw new Exception("duplicate Message in update"); 

    base.OnUpdate(); 
} 

답변

2

여기에 아마 무슨 일이 일어나고 있는지의 : 앱에서

  1. 뭔가 세션을 플러시합니다. 플러싱 동안
  2. 는 NHibernate에/액티브 당신의 OnUpdate()
  3. 의 OnUpdate()가 (이)
  4. FindAllByProperty()를 동일한 세션에서 쿼리를 실행하려고 FindAllByProperty를 호출을 실행하지만 세션은 여전히 ​​더러운 NHibernate에 플러시 때문에 세션. 따라서 2

-

  • 위로 스택 오버플. 이를 방지하기 위해

    , 새로운 세션 내에서 FindAllByProperty()를 실행 해보십시오 :

    using (new SessionScope()) 
        if (FindAllByProperty("Title", this.Title).Length > 1) 
        throw new Exception("duplicate Message in update"); 
    
  • 관련 문제