Наследование - не удалось инициализировать прокси - нет сеанса - PullRequest
0 голосов
/ 10 июня 2010

я новичок в разработке ....

мне действительно нужна помощь сейчас ... я только начинаю с Nhibernate в .Net ... когда я изучаю Наследование и пробую его ...это сбивает меня с толку ... почему я получаю сообщение об ошибке:

Инициализация [AP.Core.Domain.AccountPayable.APInvoice # API03 / 04/2010/001] -Не удалось инициализировать прокси - нетСессия.

это мой xml:

  <class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="AP.Core.Domain.AccountPayable.APAdjustment, AP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="APAdjustment">
    <id name="AdjustmentNumber" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="AdjustmentNumber" length="17" />
      <generator class="assigned" />
    </id>
    <property name="Amount" type="System.Decimal, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Amount" />
    </property>
    <property name="TransactionDate" type="System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="TransactionDate" />
    </property>
    <many-to-one class="AP.Core.Domain.AccountPayable.APInvoice, AP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" lazy="proxy" name="PurchaseInvoice">
      <column name="PurchaseInvoice_id" not-null="true" />
    </many-to-one>
    <joined-subclass name="AP.Core.Domain.AccountPayable.APCreditAdjustment, AP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" lazy="true" table="APCreditAdjustment">
      <key>
        <column name="APAdjustment_id"  />
      </key>
    </joined-subclass>
  </class>
</hibernate-mapping>

и это класс наследования:

Родительский класс ->

public class APAdjustment
        {
        #region :FIELD
        private string adjustmentNumber;
        private decimal amount;
        private DateTime transactionDate;
        private APInvoice purchaseInvoice;

Детский класс ->

public class APCreditAdjustment : APAdjustment {

  public APCreditAdjustment(){

и это мой доступ к данным:

public IList<APAdjustment> GetByNameAll()
{
   ICriteria criteria = Nhibernatesession.CreateCriteria(typeof(APAdjustment));
   return criteria.List<APAdjustment>() ;
}

Моя проблема:

  1. когда я загружаю данные в gridview ... это работает ... но я изменяю свойство на autogenerate = "true" ... я пропускаю поле "PurchaseInvoice" ... и я изменяю привязку вручную, и это работает..При редактировании этого вида сетки ... я получаю эту ошибку ...

    Инициализация [AP.Core.Domain.AccountPayable.APInvoice # API03 / 04/2010/001] -Не удалось инициализировать прокси - нет сеанса

  2. так что я чnge my xml ... lazy = "no-proxy" ... это все еще работает ... но при повторном редактировании ... я снова получаю сообщение об ошибке .. и я делаю "Закомментируйте выбранные строки" для моей ассоциации "Многие"к-одному" ... я действительно работаю ... но это не то, чего я хочу ...

МОЖЕТ ЛЮБОЙ ПОМОЧЬ МНЕ ... ?? Плизз ...: (

Примечание: я почти забыл об этом, я использую свободный спящий режим для создания базы данных. Из свободного Hibernate .. я помещаю * .xml файл ... так что я работаю в xml NHibernate ... не беглый спящий режим...:)

Ответы [ 3 ]

0 голосов
/ 18 июня 2010

Если сессия нулевая, то вы столкнулись с совершенно другой проблемой (вы не могли получить предыдущую ошибку, если ваша сессия была нулевой, я думаю, что вы что-то изменили в своем коде) Для управления сеансом нужен менеджер сеанса и класс контекста сеанса (см. Документ nHibernate * здесь ) Я предлагаю вам немного упростить свой дизайн и не вводить менеджер сессий, пока вы полностью не поняли смысл (хотя менеджер сессий это настоятельно рекомендуется для многих проектов). Просто откройте новую сессию, как

ISession session = YouSessionFactory.OpenSession()
ICriteria criteria = session.CreateCriteria(typeof(APAdjustment));

и идем дальше, избавляясь от SessionManager (только для целей тестирования). Если вы используете отложенную загрузку, сеанс ДОЛЖЕН БЫТЬ ОТКРЫТ при доступе к отложенному загруженному свойству, возможно, ваш менеджер сеансов работает не так, как вы ожидаете

С уважением, Марко

0 голосов
/ 22 июня 2010

Во всех ваших ассоциациях укажите это в своем коде:

не обретенной = "игнорировать"

0 голосов
/ 10 июня 2010

Это исключение обычно означает, что вы пытаетесь получить доступ к лениво-загруженному свойству, когда сессия закрыта (я вижу lazy="proxy" в файле отображения).Я предлагаю вам установить точку останова перед доступом к свойству «PurchaseInvoice» и проверить Session.IsOpen для сеанса, к которому принадлежит ваш экземпляр APAdjustment.

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