我正在尝试迁移现有的Web应用程序使用RavendB。

我目前在Web应用程序中有页面,可让您根据查询串中的ID查看类别,子类别和资源。

但是,我注意到Ravendb生成了根源的ID,但没有为儿童实体生成ID。

我认为子类别不是一个汇总根(类别具有子类别),因此使其成为我类别文档的子文件。

当我通过QueryString中传递的ID直接访问它的ID时,将其制作为子文档是错误的吗?但是,如果没有,我应该如何访问单个子类别,因为Ravendb似乎不会为不是汇总根部的实体生成ID?

有帮助吗?

解决方案

有个 漫长但有趣的讨论 在有关这种确切情况的乌鸦邮件列表中。

简短的答案是,Raven不是为此而设计的,只有根实体获得ID,其他所有内容都被视为价值类型。但是您可以自己实现,请查看线程末尾的代码示例以获取信息。

其他提示

我遇到了这个问题,但不舒服地让文档生成ID的问题,因为我觉得它是线程安全的,尤其是对于基于Web的环境而言。

最终,我决定让服务器使用生成的库库key方法为我生成ID:

using (var session = Store.OpenSession())
{
    if(category.SubCategories != null)
    {
       var newSubCategories = data.BankAccounts.Where(x => string.IsNullOrEmpty(x.Id));
        foreach (var sc in newSubCategories)
            sc.Id = session.Advanced.Conventions.GenerateDocumentKey(sc);    
    }

    session.Store(data);
    session.SaveChanges();
}

这样,我允许数据库生成子ID的ID,并可以确保我不必满足实际班级本身的竞赛条件等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top