Ravendb 存储对父文档的引用,而不是存储文档的副本

Ravendb 存储对父文档的引用,而不是存储文档的副本,ravendb,Ravendb,在订单和订单行的典型情况下,每个订单行都有一个对其父订单的引用。当我将订单行保存到RavenDB时,它会将完整订单记录的副本保存为每个订单行的属性。如何让它只保存指向订单的链接?像这样: { ...other orderline properties... Order : "orders/123" } 而不是这个 { ...other orderline properties... Order : { ...all properties fo

在订单和订单行的典型情况下,每个订单行都有一个对其父订单的引用。当我将订单行保存到RavenDB时,它会将完整订单记录的副本保存为每个订单行的属性。如何让它只保存指向订单的链接?像这样:

{ 
...other orderline properties...
Order : "orders/123"
}
而不是这个

     {
        ...other orderline properties...
        Order : {
    ...all properties for order 123...
        }
}

欢迎使用非关系数据库!订单行没有ID。他们不会被放进自己的文件里。它们被存放在重要的地方——按顺序

public class OrderLine
{
    public string Product { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
}

public class Order
{
    public string Id { get; set; }
    public string CustomerId { get; set; }
    public List<OrderLine> Lines { get; set; }
    public decimal Total { get; set; }
}

有关更多信息,请参阅。

当然可以,但即使在您提到的链接中,OrderLine部分也存储了对其产品的引用,而不是存储该产品所有属性的副本。当OrderLine类具有Product类型的Product属性时,如何实现这一点?是否需要更改OrthLoad类以拥有String类型的Type ID属性?请考虑在订单行中的产品信息是在订单时的精确信息。如果产品发生更改或被删除,则不应影响过去的订单或订单行。因此,您应该将所需产品中的字段复制到订单行中。您可能需要一个
ProductId
,以供参考,但您可能应该将产品描述和价格分别反规范化到订单行中。您可以为此创建一个容器类(例如,
ProductRef
),也可以单独存储字段。。。视情况而定。如果您总是在问题中显示所有评论(就像许多博客一样),那么您当然最好将它们都存储在一个文档中。无论如何,您都要加载所有文档,因此加载一个文档比加载数百个文档要好。再说一次,如果你计划有数百条评论,你可能不会一次显示所有评论,而是翻阅它们。在这种情况下,每个注释都会在它自己的文档中,并引用回QuestionId。RavenDB允许这两种选择
Include
LoadDocument
可以提供帮助。如果您对理解建模有其他问题,我想向您推荐。让我们保持特定代码的堆栈溢出。谢谢
orders/123
{
    "CustomerId": "customers/456",
    "Lines": [
        { "Product": "Foo", "Quantity": 2, "Price": 10.00 },
        { "Product": "Bar", "Quantity": 3, "Price": 20.00 },
        { "Product": "Baz", "Quantity": 4, "Price": 30.00 }
    ]
    "Total": 200.00
}