Nhibernate:未初始化的代理传递给save

时间:2009-12-23 13:13:44

标签: nhibernate

我遇到了NHibernate的问题。错误消息是:

  

未初始化的代理传递给保存

     

[PersistentObjectException:   未初始化的代理传递给save()。   宾语:   ...... Domain.Model ......]   NHibernate.Event.Default.DefaultSaveEventListener.ReassociateIfUninitializedProxy(对象   obj,ISessionImplementor source)+104   NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent   事件)+90
  NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent   事件)+156
  NHibernate.Impl.SessionImpl.SaveOrUpdate(对象   obj)+152

所以我所做的是,我有一个聚合根,并在其中包含一组对象。保存更改时,我只在集合根上调用save。子类没有对aggreate root的引用。

  <bag name="Children" cascade="all-delete-orphan" where="IsDeleted = 0" lazy="true">
    <key column="abcId"/>
    <one-to-many class="abc"/>
  </bag>

现在,当我收集一些要从UI保存的子项时出现错误,如:

root = repository.GetRootById(id)

    // collect children from data list 
    abc = repository.GetAbcById(abcId) 
    abc.Name = textName.Text; 
    ...

    // no root.Children.Add(abc) is performed here, since abc already is a child of root    

    repository.Save(root); 
    ... 
    Exception occurs

现在如果我在保存之前访问root.Children,它就可以了。

任何?

1 个答案:

答案 0 :(得分:0)

修正了..根未被初始化,因为在存储库中.GetRootById(..)我使用session.Load而不是session.Get。所以root根本没有加载......