Je veux réduire les allers-retours à la base de données lorsque j'ajoute une relation.Manière la plus efficace de gérer parent/enfant
public class Parent { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList Children { get; set; } //inverse = true; cascade = all } public class Child { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual Parent Parent { get; set; } } Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush();
Cela fonctionne, j'ai seulement sélectionner pour enfant et mise à jour pour enfant. Mais cela ne fonctionne pas avec le cache de second niveau.
=== Session 1 === Parent parent = Session.Get(1); var count = parent.Children.Count; === Session 1 === === Session 2 === Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush(); === Session 2 === === Session 3 === Parent parent = Session.Get(1); var count = parent.Children.Count; //INCORRECT! Session 2 didn't update collection. === Session 3 ===
Si j'ajoute parent.Children.Add (enfant) en session 2, NHibernate ne sélectionner pour les parents, mais pourquoi? Je pense que c'est les frais généraux.
Que voulez-vous dire? child.parentId = parentId? Cela ne fonctionne pas avec le cache de second niveau. – Andy