2010-02-03 6 views
0

Je suis nouveau db4o et je suis en train de savoir s'il est possible de faire ce qui suit:Structure db4o Arbre C#

public class Page 
{ 
    public Guid ID {get;set;} 
    public Page Parent {get;set;} 
    public IList<Page> Children {get;set;} 
    public String Name {get;set;} 
    public String Depth {get;set;} 
} 

Quand je sauve la page que je l'ai est parent seulement. IE

Page p1 = new Page() { 
    ID = Guid.NewGuid(), 
    Name = "p1", 
    Parent = null 
}; 
Page p2 = new Page() { 
    ID = Guid.NewGuid(), 
    Name = "p2", 
    Parent = p1 
}; 
Page p3 = new Page() { 
    ID = Guid.NewGuid(), 
    Name = "p3", 
    Parent = p1 
}; 

Lorsque je charge p1 est de toute façon pour alimenter les deux enfants ??

+0

vous devez stocker les enfants avant d'enregistrer les pages ;-) Dans votre cas faire qqch . comme p1.Children.Add (p3) (attention: je ne suis pas familier avec la version C# ...) – Karussell

+0

Vous devriez ajouter un tag de langue à votre question pour le rendre plus facile aux gens de voir s'ils peuvent aider ou non. –

+0

langue Ajouté, mais j'aurait exceptée une réponse en Java –

Répondre

1

db4o chargera également la collecte des enfants dès que vous chargez p1 du datastore, donc oui il est possible ...

1

Eh bien la meilleure façon de le faire est en fait simplement utiliser la propriété appel à des choses câbler. Comme ceci:

public class Page 
{ 
    private Page _parent; 
    public Page Parent { 
     get{return _parent;} 
     set{ 
      value.Children.Add(this); 
      this._parent = value; 
     } 
    } 
    public IList<Page> Children {get;set;} 

    // omitted the the other properties 
} 

Dès que vous attribuez une page instance à Page.Parent, la page est dans la Page.Children-propriété.

Est-ce une solution?

+0

a ajouté en .. question tho .. si je mets les enfants = nouvelle liste () dans mon constructeur fait cet effet db4o quand il l'objet d'ingrédients actifs sur la charge? –

+0

Normalement, non. Par défaut, db4o crée une instance "vide" de la classe via la réflexion sans utiliser le constructeur. Et puis il met les valeurs dans cette instance, toujours par réflexion. Il est possible de configurer db4o de telle sorte qu'il appelle les constructeurs: http://developer.db4o.com/Documentation/Reference/db4o-7.12/net35/reference/html/reference/tuning/performance_hints/calling_constructors. html De plus, sur certaines plates-formes intégrées et plus limitées, le constructeur est également appelé. – Gamlor

0

ne suis pas sûr db4o mais vous devriez envisager d'utiliser le IComposite pattern pour cela.

+0

J'aime ce modèle qui a du sens .. Je vais l'implémenter .. merci de l'avoir porté à mon attention –