2010-02-03 5 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

당신이 아이를 저장해야합니다 ... 그래서 네, 그것은 가능하다, 빨리도 아이들의 컬렉션을로드 ;-) 귀하의 경우에는 STH을 . p1.Children.Add (p3) (경고 : 저는 C# 버전에 익숙하지 않습니다 ...) – Karussell

+0

도움을 줄 수 있는지 사람들이 쉽게 볼 수 있도록 질문에 언어 태그를 추가해야합니다. –

+0

추가 된 언어,하지만 Java에서 답변을 제외했을 것입니다 –

답변

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 않습니다? –

+0

일반적으로 그렇지 않습니다. 기본적으로 db4o는 생성자를 사용하지 않고 리플렉션을 통해 클래스의 '빈'인스턴스를 만듭니다. 그런 다음 다시 반사를 통해이 인스턴스에 값을 넣습니다. db4o를 다음과 같이 생성자를 호출하는 방식으로 구성 할 수 있습니다. http://developer.db4o.com/Documentation/Reference/db4o-7.12/net35/reference/html/reference/tuning/performance_hints/calling_constructors. html 또한 제한된 일부 임베디드 플랫폼에서 생성자가 호출됩니다. – Gamlor

0

DB4O에 대해 확실하지 않지만이 경우 IComposite pattern을 사용해야합니다. 당신이 데이터 저장소에서 P1을로드로

+0

나는이 패턴이 의미가 있다는 것을 좋아한다. 나는 이것을 구현하려고한다. 나의주의를 가져 주셔서 고마워요. –