2010-11-12 25 views
3

我剛開始學習蒙戈分貝,並想知道如果我做錯了什麼....我有兩個對象:的MongoDB和自我引用對象

public class Part 
{ 
    public Guid Id; 
    public ILIst<Materials> Materials; 
} 

public class Material 
{ 
    public Guid MaterialId; 
    public Material ParentMaterial; 
    public IList<Material> ChildMaterials; 
    public string Name; 
} 

當我試圖挽救這個特定對象由於循環引用,我收到堆棧溢出錯誤。我的問題是,有沒有辦法解決這個問題?在WCF中,我可以將datacontract上的「IsReference」屬性添加爲true,並且它序列化得很好。

回答

0

我能夠通過使用NoRM mongodb的修改驅動程序完全實現我所需的功能。

1

你在用什麼驅動程序?

在規範,您可以創建像這樣

public DbReference<Material> ParentMaterial; 

MongoDB的-CSHARP不提供強類型DbReferences一個DbReference,但你仍然可以使用它們。

public DBRef ParentMaterial; 

您可以按照參考Database.FollowReference(ParentMaterial)

+0

我使用https://github.com/samus/mongodb-csharp/downloads中的mongodb-csharp驅動程序 – PCG 2010-11-12 01:11:22

0

如果要存儲具有它們之間關係的對象圖,需要多個「連接」才能找到答案,則最好使用SQL樣式的數據庫。 MongoDB和其他人以文檔爲中心的做法可能會以不同的方式來構造。

看看MongoDB nested sets,它建議一些方法來表示這樣的數據。

1

僅供將來參考,諸如未嵌入子文檔結構內的對象之間的引用之類的事情由NoSQL ODB處理得非常好,它通常用於處理仲裁複雜對象模型中的透明關係。

如果您熟悉Hibernate,想象一下,沒有任何映射文件AT ALL和更高的性能,因爲在後臺沒有運行時JOIN,所有關係都以b-tree查找的速度解決。

這是來自Versant的video(披露 - 我爲他們工作),所以你可以看到它是如何工作的。

這是一開始有點乏味,但顯示每一個步驟採取一個Java應用程序,並使其在ODB持久性...然後使其容錯,分佈式,做一些並行查詢,優化緩存負載, etc ...

如果你想跳到很酷的部分,跳過大約20分鐘,你將避免構建應用程序,只是看到它是多麼容易動態演進架構,添加分佈和容錯到任何現有應用程序):