继承 - 无法初始化代理 - 无会话

时间:2010-06-10 01:29:31

标签: c# nhibernate fluent-nhibernate

我是新手开发者......

我现在真的需要帮助...... 我刚开始使用.Net的Nhibernate事情... 当我学习继承并尝试它...它让我感到困惑......为什么我会得到这样的错误:

正在初始化[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>

这是继承类:

父类 - &gt;

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

儿童类 - &gt;

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”字段......和我 更改为手动绑定,它 当我编辑那个gridview时 我明白了 错误...

    初​​始化[AP.Core.Domain.AccountPayable.APInvoice#API03 / 04/2010/001] -Could     没有初始化代理 - 没有会话

  2. 然后我改变了我的xml ... lazy =“no-proxy”......它仍然 工作...但再次编辑...我明白了 错误再次..我做“评论 选定的行“到我的 协会“多对一”...我真的 它起作用..但那不是我想要的......

  3. CAN ANYBODY能帮助我...... ?? Plizz ...... :(

    注意:我几乎忘了它,我使用流利的hibernate生成数据库。从流畅的Hibernate ..i放* .xml文件...所以我的工作到xml NHibernate ...不流利的hibernate事情.. :)

3 个答案:

答案 0 :(得分:0)

此异常通常意味着您在会话关闭时尝试访问延迟加载的属性(我在映射文件中看到lazy="proxy")。我建议您在访问“PurchaseInvoice”属性之前设置一个断点,并检查您的Session.IsOpen以查看您的APAdjustment实例所属的会话。

答案 1 :(得分:0)

如果会话为null,那么你现在面临一个完全不同的问题(如果你的sesion是null,你就无法获得上一个错误,我相信你已经改变了代码中的某些内容) 会话管理需要会话管理器和会话上下文类(请参阅nHibernate doc here) 我建议你简化一下你的设计,不要介绍一个你完全理解其含义的会话管理器(虽然会话管理器是很多项目强烈推荐的做法)。只需打开一个像

这样的新会话
ISession session = YouSessionFactory.OpenSession()
ICriteria criteria = session.CreateCriteria(typeof(APAdjustment));

并继续摆脱SessionManager(仅用于测试目的)。如果您正在使用延迟加载,则在访问延迟加载的属性时,会话必须打开,可能您的会话管理器无法按预期工作

问候,Marco

答案 2 :(得分:0)

在您的所有协会中,将其放在您的代码中:

  

未找到= “忽略”