2010-12-16 4 views
0

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.

Répondre

0

bien, quand je gère la relation parent/enfant sur I.E. catégories que j'ai une catégorie unite qui contient dans l'exemple ID, Name et ParentID, en utilisant cela, vous pouvez définir les relations parent/enfant à tout niveau

+0

Que voulez-vous dire? child.parentId = parentId? Cela ne fonctionne pas avec le cache de second niveau. – Andy

Questions connexes