2010-02-03 69 views
0

我是新來的db4o,我試圖找出是否有可能做到以下幾點:db4o的樹結構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;} 
} 

當我保存的網頁我有隻的父。 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 
}; 

當我加載p1爲反正有填充兩個孩子??

+0

你應該保存孩子在保存網頁前;-)你的情況做... 。像p1.Children.Add(p3)(警告:我不熟悉C#版本......) – Karussell 2010-02-03 13:46:19

+0

您應該爲您的問題添加一個語言標記,以便人們更容易看到他們是否可以提供幫助。 – 2010-02-07 14:44:52

+0

添加了語言,但我會在Java中排除一個答案 – 2010-02-08 02:49:35

回答

1

DB4O也將盡快加載兒童的收集,所以是有可能......

1

那麼最簡單的方法就是使用property-call來連線。就像這樣:

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 
} 

只要你分配一個頁面實例Page.Parent,頁面是在Page.Children屬性。

這是一個解決方案嗎?

+0

添加此在..問tho ..如果我把兒童=新列表()到我的構造函數做這種效果Db4o時,它加載時激活對象? – 2010-02-09 22:06:43

+0

通常情況下不會。默認情況下,db4o通過反射創建類的'空'實例,而不使用構造函數。然後它將這些值放入這個實例中,再次通過反射。 可以通過調用構造函數來配置db4o:http://developer.db4o.com/Documentation/Reference/db4o-7.12/net35/reference/html/reference/tuning/performance_hints/calling_constructors。 html 另外在一些嵌入的,更有限的平臺上,構造函數也被調用。 – Gamlor 2010-02-09 23:18:19

0

不確定DB4O,但您應該考慮使用IComposite pattern。當你從數據存儲加載P1

+0

我喜歡這種模式是有道理的..我要實現它..感謝您將它引起我的注意 – 2010-02-09 12:47:15