2012-03-21 6 views
1

У меня проблема с загрузкой и выселением в сеансе спящего режима, вот коды.Не удалось инициализировать прокси - нет сеанса сессии.LOAD и EVICT

 public virtual void ClearData(T obj) 
    { 

     using (ISession ses = SessionManager.OpenSession()) 
     { 
      ses.Evict(obj); 
     } 

    } 

     public virtual T Load<T>(object id) 
    { 
     using (ISession ses = SessionManager.OpenSession()) 
     { 
      return (T)ses.Load(typeof(T), id); 
     } 
    } 

называя его

  Firmy fir = new Firmy(); 
     fir.ClearData(fir); 
     var yol = fir.Load<Firmy>(6); 
     Response.Write("<br/><br/><br/> TEST get"); 
     Response.Write(yol.NazwaFirmy); 
     Response.Write("<br/><br/><br/> TEST EVI"); 
     fir.ClearData(yol); 
     Response.Write(yol.NazwaFirmy); 

и вот сессия Menager

public class SessionManager 
{ 
    #region Class Member Declarations 
    private static readonly ISessionFactory _sessionFactory; 
    private static readonly Configuration _configuration; 
    #endregion 
    static SessionManager() 
    { 
     _configuration = new Configuration(); 
     _configuration.Configure(); 
     _configuration.AddAssembly(typeof(SessionManager).Assembly); 
     _sessionFactory = _configuration.BuildSessionFactory(); 
    } 


    public static ISession OpenSession() 
    { 
     return _sessionFactory.OpenSession(); 
    } 
    #region Class Property Declarations 

    public static ISessionFactory SessionFactory 
    { 
     get { return _sessionFactory; } 
    } 
    #endregion 
} 

Я хочу, чтобы загрузить некоторые данные пихты с функцией загрузки, а затем четкие данные с cleardata но ИДК, как это было основано на каком-то туториале.

ответ

1

Где вы, exaccty, получите ошибку?

Несколько вещей, которые не в порядке:

  • Вы звоните выселить (первое время) для объекта, который не связан с какой-либо NHibernate сессии (вы только что создали его). Evict предназначен для отсоединения объекта от сеанса, но имеет смысл только при загрузке объекта с этим сеансом.

  • Вы создаете сеанс на каждом этапе, и это не рекомендуется. Вы загружаете объект за один сеанс, а затем пытаетесь выселить его на другом сеансе, и это невозможно.

+0

Хм может сказать, как изменить сеанс менганга, чтобы предотвратить возникновение таковых? И ошибка всегда вызвана выводом или загрузкой. – Endiss

+0

Вам нужно будет изменить метод, чтобы получить сеанс. Вы бы создали новый, только если его уже нет. Вам также понадобится метод закрытия сеанса. Я рекомендую вам использовать диспетчер сеансов из [здесь] (http://www.codeproject.com/Articles/13390/NHibernate-Best-Practices-with-ASP-NET-1-2nd-Ed) –

+0

Или вы могли бы помочь мне написать один на моем примере? – Endiss