2010-01-20 6 views
1

J'ai une classe parente qui contient une liste d'enfants. J'ai le parent et l'enfant mappés bidirectionnel avec un has-many et un inverse sur le parent avec cascade.all activé. Si je modifie un objet dans la liste des enfants, mais aucune propriété sur le parent, nHibernate n'enregistre pas l'enfant. Si je modifie une propriété sur le parent tout économise bien. Est-ce par conception ou y a-t-il une propriété particulière que je dois définir?nHibernate Enregistrer un-à-plusieurs

+0

L'enfant est-il mappé dans le mappage du parent, le parent mappé dans le mappage de l'enfant ou les deux? – hackerhasid

+0

les deux comme suit: (parent) HasMany (x => x.Initiatives). KeyColumns.Add ("ProjectId"). AsBag(). Cascade.SaveUpdate(). LazyLoad(). Inverse(); (Enfant) Références (x => x.ParentProject) .Column ("ProjectId"). Cascade.SaveUpdate(); –

+0

Je crois que vous devez appeler enregistrer sur le parent afin qu'il puisse sauver les enfants. – snicker

Répondre

0

Cela peut avoir un rapport avec la façon dont vous ajoutez les enfants à la collection. Dans un bidirectionnel, vous devez gérer les deux côtés de la relation dans le code. Prenons l'exemple du Fluent Nhibernate Getting Started Guide. Vérifiez l'entité de magasin.

Un magasin compte de nombreux employés. La propriété Staff de Store est une collection d'employés. La relation est configurée comme bidirectionnelle.

Store a la méthode suivante

public virtual void AddEmployee(Employee employee) 
{ 
    employee.Store = this; 
    Staff.Add(employee); 
} 

Comme vous pouvez le voir, la Childs propriété Parent doit être réglé sur l'objet parent. Si cela n'est pas fait, Nhibernate ne pourra pas comprendre qui est le parent de l'enfant et ne peut pas sauvegarder automatiquement l'enfant si seulement l'enfant est modifié et que SaveOrUpdate (parent) est appelé.

Vous devez faire les deux.

+0

Je fais ça. –

0

Je l'ai compris. Je testais l'audit en utilisant divers listeurs. Lorsque je me suis connecté à IFlushEntityListner, les sauvegardes ont cessé de fonctionner. Geez c'était frustrant. Merci tout le monde!

Questions connexes