2010-05-28 5 views
0

이것을 할 수 있습니까?
나는 내 코드에서 다음과 같습니다이 Session은 SessionScope - Castle ActiveRecord에 의해 처리됩니까

public class ARClass : ActiveRecordBase<ARClass> 
{ 
     ---SNIP--- 

    public void DoStuff() 
    { 
     using (new SessionScope()) 
     { 
      holder.CreateSession(typeof(ARClass)).Lock(this, LockMode.None); 
      ...Do some work... 
     } 
    } 
} 

을 그래서, 난 당신이 추측 할 수 확신 나는이 객체 게으른로드 참조에 액세스 할 수 있도록, 내가이 일을하고있다. 그것은 위대한 작품이지만, 나는 이런 식으로 Session을 생성하고 그냥 삭제하는 것에 대해 걱정하고 있습니다. SessionScope에 제대로 등록되어 있고 스코프가 내 ISession을 처리 할 때 적절히 감별합니까? 또는 직접 관리하려면 더 많은 작업을 수행해야합니까?

+0

여기 진짜 문제는 개체에 게으른로드 참조를 액세스하기 위해이 일을하고 있다는 것입니다. 당신은 이것을해서는 안됩니다. 이것에 대해 더 많은 맥락을 제시 할 수 있습니까? –

+0

분리 상태입니다. 게으른로드 된 참조에 액세스 할 수 있으려면 세션에 다시 연결해야합니다. – oillio

답변

0

제가 말할 수있는 한, 이것은 정상적으로 작동합니다. 나는이 방법으로 아무런 문제도 발견하지 못했다.

내 모든 AR 클래스가 상속하는 추상 기본 클래스가 있습니다. 이 클래스에서는 Reachach 함수를 정의합니다. 조심해야하는만큼 괜찮습니다. 이 활성 SessionScope 외부에 있거나 이미 활성화 된 세션에 연결된 객체가 인 경우 작동하지 않습니다. 이는 모습입니다

:

public abstract class BaseModel<T> : ActiveRecordLinqBase<T> 
{ 
    public virtual void Reattach() 
    { 
     if (!holder.ThreadScopeInfo.HasInitializedScope) 
      throw new Exception("Cannot reattach if you are not within a SessionScope."); 
     holder.CreateSession(typeof(T)).Lock(this, NHibernate.LockMode.None); 
    } 
} 
관련 문제