使用C#/MVC更新RavenDB中现有列表的最佳方法?
我有一个文档类:使用C#/MVC更新RavenDB中现有列表的最佳方法?,c#,asp.net-mvc,ravendb,C#,Asp.net 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>(); } } 这些
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>();
}
}
这些都是标准的,效果很好,最后我得到了一个如下的文档:
{
"OwnerId": "ApplicationUsers/1",
"Files": [
"File1.pdf",
"Another File.pdf"
]
}
现在,当我想向现有文档添加更多文件名(或从现有文档中删除文件名)时,我是否必须将现有文件名持久保存在隐藏元素中,或者RavenDB是否有某种更新命令,允许持久保存现有文档并有条件地向该文件元素添加值
作为参考,将列表“填充”到隐藏元素中的最佳方法是什么?这不会引发错误:
@Html.HiddenFor(model => model.Files)
但它将“System.Collections.Generic.List`1[System.String]”放在隐藏元素中,因为它显然不是字符串,而是列表
因为我以前从未与RavenDB合作过,所以我不清楚这里的最佳实践,在浏览了RavenDB的几本书之后,令人惊讶的是,我没有看到任何与手头的基本任务相符的东西
我希望我能充分解释我想做的事情 在我的情况下,要创建多个隐藏输入,所有命名的“文件”都能完美工作:
foreach (var item in Model.Files)
{
<input type="hidden" name="files" value="@item" />
}
foreach(Model.Files中的var项)
{
}
仍然似乎不是处理列表类型的一种非常优雅的方式 您是否使用NFS来存储文件本身?因为如果是这样的话,我建议您将DocId存储在给定文件所属的文件元数据中——这样更易于维护。(例如,假设FS和RavenDB在另一台服务器上运行,FS服务器脱机。然后您必须自己撤消操作,而如果文档id在文件元数据中,并且保存失败,则您不必撤消任何操作,因为没有任何操作,因为首先不会保存任何操作)不,我正在使用Amazon S3存储文件。这是我在其他应用程序中所做的。这一部分没有问题。我只是想确定更新列表的最佳实践。你是将列表填充在隐藏字段中,还是使用多个隐藏字段?你能更新部分文档还是必须更新整个文档?我已经完成了更新部分文档时,其他值将被删除。
@Html.HiddenFor()
创建一个
-并且输入只能保存一个值,不能保存一个集合。您需要为集合中的每个项目创建一个输入-
foreach (var item in Model.Files)
{
<input type="hidden" name="files" value="@item" />
}