Обрабатывается ли эта сессия SessionScope - Castle ActiveRecord - PullRequest
0 голосов
/ 28 мая 2010

Могу ли я сделать это?
В моем коде есть следующее:

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 голосов
/ 30 июля 2010

Насколько я могу сказать, да, это прекрасно работает. Я не нашел проблем с этим методом.

У меня есть абстрактный базовый класс, который все мои классы AR наследуются от. В этом классе я определяю Reattach функция. Это работает нормально, если вы осторожны. Это не будет работать, если вы находятся вне активной 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); 
    } 
} 
...