我可以这样做吗? 我的代码中有以下内容:
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?或者我自己需要做更多的事情来管理它?
答案 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);
}
}