2

下面是存储在 RavenDB 中的示例“订单”文档。如果我只想更新一个嵌套文档,例如。"Product": "products/2-A" 我想单独更新这个嵌套元素,如何使用 Raven C# 客户端来实现?

示例 JSON 文档:

{
    "Company": "companies/65-A",
    "Employee": "employees/1-A",
    "Freight": 8.53,
    "Lines": [
        {
            "Discount": 0.2,
            "PricePerUnit": 19,
            "Product": "products/2-A",
            "ProductName": "Chang",
            "Quantity": 24
        },
        {
            "Discount": 0,
            "PricePerUnit": 10,
            "Product": "products/3-A",
            "ProductName": "Aniseed Syrup",
            "Quantity": 4
        },
        {
            "Discount": 0,
            "PricePerUnit": 22,
            "Product": "products/4-A",
            "ProductName": "Chef Anton's Cajun Seasoning",
            "Quantity": 1
        }        
    ],
    "OrderedAt": "1998-05-06T00:00:00.0000000",
    "RequireAt": "1998-06-03T00:00:00.0000000",
    "ShipTo": {
        "City": "Albuquerque",
        "Country": "USA",
        "Line1": "2817 Milton Dr.",
        "Line2": null,
        "Location": {
            "Latitude": 35.1154322,
            "Longitude": -106.6710792
        },
        "PostalCode": "87110",
        "Region": "NM"
    },
    "ShipVia": "shippers/2-A",
    "ShippedAt": null,
    "@metadata": {
        "@collection": "Orders",
        "@flags": "HasRevisions"
    }
}

请提供您的建议。谢谢

4

2 回答 2

2

如果您要更新相关文档“products/2-A”它不是“Lines”数组中的元素,那么唯一要做的就是加载产品、编辑并保存更改。

如果您打算更新“线”内的元素,我建议您了解 RavenDB 的工作原理(或者更一般地说,面向文档的数据库如何工作)。实体作为文档完全持久化。然后您只需要加载和编辑列表中的元素,并使用 session.SaveChanges() 持久化“Order”。

于 2018-12-10T15:11:58.260 回答
2

听起来您正在寻找补丁,请查看此文档。

https://ravendb.net/docs/article-page/4.1/csharp/client-api%2foperations%2fpatching%2fset-based

于 2018-12-10T19:45:40.670 回答