Не удалось инициализировать прокси - нет сеанса Session.LOAD и EVICT - PullRequest
1 голос
/ 21 марта 2012

у меня проблема с загрузкой и выселением в сеансе hibernate, вот коды.

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

а вот сессионный менеджер

    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 Ответ

1 голос
/ 21 марта 2012

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

Пара вещей, которые не в порядке:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...