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
Répondre
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.
Je fais ça. –
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!
- 1. NHibernate Enregistrer, Supprimer, Enregistrer donne violation clé unique
- 2. Enregistrer NHibernate Interceptor personnalisé via Windsor
- 3. nhibernate pour enregistrer seulement les propriétés requises
- 4. Enregistrer des objets dans NHibernate IInterceptor
- 5. Nhibernate: proxy non initialisé passé pour enregistrer
- 6. NHibernate enregistrer l'objet, une colonne est null
- 7. Comment enregistrer une ou plusieurs entités dans une session NHibernate sans enregistrer d'autres entités incorrectes?
- 8. NHibernate - Enregistrer l'enfant - seule clé définie à partir du parent
- 9. NHibernate: Comment enregistrer une nouvelle entité sans écraser le parent:
- 10. NHibernate Error - Enregistrer l'instance transitoire avant le vidage
- 11. Comment faire pour enregistrer en cascade avec CompositeId dans NHibernate?
- 12. SaveOrUpdate Vs Mettre à jour et enregistrer dans NHibernate
- 13. Comment enregistrer une grande collection nhibernate sans provoquer d'exception OutOfMemoryException
- 14. Comment enregistrer un objet transitoire existant dans une session NHibernate?
- 15. Notifications Nhibernate et db
- 16. Héritage NHibernate/NHibernate Question
- 17. Mappages NHibernate/NHibernate courants
- 18. NHibernate/Fluid NHibernate Mapping
- 19. Nhibernate et ISession
- 20. Comment enregistrer un fichier PDF Utilisation de NHibernate et SQL Server 2005
- 21. comment puis-je faire nhibernate cascade enregistrer un ensemble d'objets avec des références circulaires?
- 22. Enregistrer les données via un service Web à l'aide de NHibernate?
- 23. Enregistrer même structure de classe dans deux ensembles de tables avec NHibernate
- 24. NHibernate commit changements db sans appel explicite pour enregistrer ou mettre à jour
- 25. Ajouter et enregistrer des objets non persistants à un objet persistant dans NHibernate
- 26. nhibernate datacontext
- 27. NHibernate Fluent avec NHibernate 3.0
- 28. NHibernate + Fluent Index NHibernate + Oracle
- 29. Comment enregistrer ne pas enregistrer sous
- 30. enregistrer l'inkcanvas
L'enfant est-il mappé dans le mappage du parent, le parent mappé dans le mappage de l'enfant ou les deux? – hackerhasid
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(); –
Je crois que vous devez appeler enregistrer sur le parent afin qu'il puisse sauver les enfants. – snicker