2013-01-07 72 views
2

這是我的目標:RavenDb Patching Api是否適用於遞歸對象?

public class CMSContentItemFolder 
{ 
    int Id {get; set; } 
    public Guid InstanceId { get; set; } 
    public List<CMSContentItemFolder> ContentItemFolders { get; set; } 
    public List<CMSContentItem> ContentItems { get; set; } 
} 

因此,文件夾可以有子文件夾的無限的水平,就像你的C盤上的系統文件夾中。

爲了讓我在一個文件夾上執行CRUD並且它是子項目,我必須編寫遞歸方法,它可以工作,但有點痛苦。我知道修補API會更好,但我還沒有看到它用於遞歸對象的示例。

在RavenDb中做到這一點的最佳方法是什麼?

謝謝!

回答

0

你應該封裝模型參考,不能同時。在你的對象中,嵌套的CMSContentItemFolder上的Id的目的是什麼?你應該可以參考。這同樣適用於內容項目。他們可能都在他們自己的文件中。

public List<int> ContentItemFolderIds { get; set; } 
public List<int> ContentItemIds { get; set; } 

然後,您在修補時沒有任何遞歸來與之抗衡。

+0

謝謝馬特 - 你說得對,應該刪除。 我正在構建一個CMS,這是一個文件存儲庫模塊。如果我按照你的建議做了,如果每個文件和文件夾都有自己的烏鴉文件,就不會有性能問題?文件存儲庫的每個實例可能有數百甚至上千個文件和文件夾。 用我最初的方法,我可以在一次調用中檢索整個文件存儲庫... –

+0

與大多數情況一樣,在封裝和引用之間有一個平衡點。主要因素是您如何加載數據。你是否總是將所有文件和文件夾從根目錄一直到所有葉節點?如果是這樣,封裝。如果不是,請參考。 Raven可以輕鬆處理數百萬個文件,所以這不是問題。爲了避免必須進行多次單獨調用,請使用[Includes](http://ravendb.net/docs/client-api/querying/handling-document-relationships#includes) –