2017-02-23 58 views
0

我有一個文檔類:使用C#/ MVC更新RavenDB中現有列表的最佳方法?

public class Document 
{ 
    public int Id { get; set; } 
    public String PropertyOwnerId { get; set; } 
    public List<string> Files { get; set; } 

    public Document() 
    { 
     this.Files = new List<string>(); 
    } 
} 

用戶將上傳文件和文件名都存儲在一個循環。

foreach (var file in documents) 
{ 
    model.Files.Add(fileName); 
} 

這是所有標準和工作正常,我結束了一個文件,看起來像這樣:

{ 
    "OwnerId": "ApplicationUsers/1", 
    "Files": [ 
     "File1.pdf", 
     "Another File.pdf" 
    ] 
} 

現在,當我想更多的文件名添加到現有的文件(或刪除文件現有文檔中的名稱),我是否必須在隱藏元素中保留現有文件名,或者是否存在RavenDB具有的某種更新命令,以允許持久化現有文檔並有條件地向此Files元素添加值?

作爲一個參考點,什麼是「填充」到隱藏元素列表的最佳方式?這不會引發錯誤:

@Html.HiddenFor(model => model.Files) 

但是它把「System.Collections.Generic.List`1 [System.String]」中隱藏的元素,因爲這顯然不是一個字符串,它是一個列表。

因爲在我對這裏的最佳實踐還不清楚之前,我從未與RavenDB合作過,並且在瀏覽了幾本RavenDB書籍之後,出人意料的是,我沒有看到任何似乎與此基本任務相對應的東西。

我希望我能解釋一下我正在努力做好的事情。

+0

你是否使用RavenFS來存儲文件本身?因爲如果是這樣的話,我建議您將DocId存儲在給定文件所屬的文件元數據中 - 這樣更容易維護它,就像imo一樣。 (想象一下,例如,FS和RavenDB運行在不同的服務器上,並且FS服務器脫機,那麼你必須自己撤消這些操作,而如果doc ID在文件元數據中,並且保存失敗,不需要任何東西,因爲沒有東西會得到保存)。 –

+0

不,我正在使用Amazon S3來存儲文件。這是我在其他應用程序中完成的。該部分沒有問題。我只是想確定更新列表的最佳做法。你是否將這個列表填入隱藏字段,或使用多個隱藏字段?你能更新一個部分文件還是你必須更新整個文件?我試過更新部分文檔,其他值被擦除。 – TheSynoptical

+1

'@ Html.HiddenFor()'創建一個'' - 並且輸入只能保存一個值,而不是集合。您需要爲集合中的每個項目創建一個輸入 - –

回答

0

對於我的情況,創建多個隱藏輸入的所有命名爲「文件」完美的作品:

foreach (var item in Model.Files) 
{ 
    <input type="hidden" name="files" value="@item" /> 
} 

似乎仍然沒有被處理列表類型的一個非常優雅的方式。

相關問題