我遇到了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,它就可以了。
任何?
答案 0 :(得分:0)
修正了..根未被初始化,因为在存储库中.GetRootById(..)我使用session.Load而不是session.Get。所以root根本没有加载......