Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RavenDb补丁Api是否适用于递归对象?_Ravendb - Fatal编程技术网

RavenDb补丁Api是否适用于递归对象?

RavenDb补丁Api是否适用于递归对象?,ravendb,Ravendb,这是我的目标: public class CMSContentItemFolder { int Id {get; set; } public Guid InstanceId { get; set; } public List<CMSContentItemFolder> ContentItemFolders { get; set; } public List<CMSContentItem> ContentItems { get; set; }

这是我的目标:

public class CMSContentItemFolder
{
    int Id {get; set; }
    public Guid InstanceId { get; set; }
    public List<CMSContentItemFolder> ContentItemFolders { get; set; }
    public List<CMSContentItem> ContentItems { get; set; }
}
公共类CMS内容文件夹
{
int Id{get;set;}
公共Guid实例ID{get;set;}
公共列表ContentItemFolders{get;set;}
公共列表ContentItems{get;set;}
}
因此,文件夹可以有无限级的子文件夹,就像c驱动器上的系统文件夹一样

为了在文件夹及其子文件夹上执行CRUD,我必须编写递归方法,这很有效,但有点麻烦。我知道修补API会更好,但我还没有看到它适用于递归对象的示例

在RavenDb做这件事最好的方法是什么


谢谢

您应该使用封装引用进行建模,而不是两者都使用。在对象中,嵌套的CMSContenteMFolder上的Id的用途是什么?您可能应该改为引用。内容项目也是如此。它们可能都在各自的文档中

public List<int> ContentItemFolderIds { get; set; }
public List<int> ContentItemIds { get; set; }
public List contentItemFolderId{get;set;}
公共列表ContentItemId{get;set;}

那么,在进行修补时,您就不会遇到任何递归问题。

谢谢Matt-您的Id是正确的,应该删除它。我正在构建一个CMS,这是一个文件存储库模块。如果我按照您的建议做了,那么如果每个文件和文件夹都有自己的raven文档,那么不会有性能问题吗?文件存储库的每个实例可能有数百甚至数千个文件和文件夹。使用我最初的方法,我可以在一次调用中检索整个文件存储库……就像大多数事情一样,在封装和引用之间需要取得平衡。主要因素是如何加载数据。您是否总是从根节点到所有叶节点获取所有文件和文件夹?如果是,封装。若否,请参阅。Raven可以轻松处理数以百万计的文档,因此这不成问题。要避免打很多单独的电话,请使用