2009-12-23 4 views
0

J'ai un problème avec NHibernate. Le message d'erreur est:Nhibernate: proxy non initialisé passé pour enregistrer

proxy pour sauver Uninitialized passé

[PersistentObjectException: proxy non initialisée passé pour sauver(). Objet: ...... Domain.Model ......] NHibernate.Event.Default.DefaultSaveEventListener.ReassociateIfUninitializedProxy (Object obj source ISessionImplementor) +104 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate (SaveOrUpdateEvent événement ) +90
NHibernate.Impl.SessionImpl.FireSaveOrUpdate (SaveOrUpdateEvent événement ) +156
NHibernate.Impl.SessionImpl.SaveOrUpdate (Object obj) +152

Alors ce que je fais est , J'ai une racine agrégée d au sein de cette collection d'objets. Lors de l'enregistrement des modifications, j'appelle save sur la racine agrégée uniquement. La classe enfant n'a pas de référence à la racine aggreate.

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

Maintenant, l'erreur apparaît quand je collectionne des enfants à être sauvés de l'interface utilisateur comme:

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 

Maintenant, si j'accéder à root.Children avant d'enregistrer, cela fonctionne.

Quelqu'un?

Répondre

0

Correction de la racine .. non initialisée car dans le dépôt .GetRootById (..) j'ai utilisé session.Load au lieu de session.Get. Donc, la racine n'a jamais été chargée ...

Questions connexes