这个ISession是由SessionScope - Castle ActiveRecord处理的

时间:2010-05-28 02:56:13

标签: 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...
        }
    }
}

所以,我确信你可以猜到,我这样做是为了能够访问对象中的延迟加载引用。它工作得很好,但是我担心创建一个这样的ISession并放弃它。它是否在SessionScope中正确注册,并且当处理掉时,范围是否适当地削弱了我的ISession?或者我自己需要做更多的事情来管理它?

1 个答案:

答案 0 :(得分:0)

据我所知,是的,这样可行。我发现这个方法没有问题。

我有一个抽象的基类 我的所有AR类都继承自。在本课程中,我定义了一个Reattach 功能。 只要你小心,这个工作正常。如果你这不行 在活动的SessionScope之外或者对象已经存在 附加到活动的ISession。

这就是它的样子:

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); 
    } 
}