从RavenDb中的patch命令返回实际的修补属性值

时间:2015-06-29 14:46:24

标签: c# ravendb

A有一个“Billing”类,用于描述多线程应用程序中的财务帐户模型。如果我想将钱从一个账单转移到另一个账单,我可以使用patch命令增加一个属性并减少另一个属性。在没有冗余加载查询的情况下修补后返回实际属性值的正确方法是什么?

结算课程

public class Billing
{
    public string Id { get; set; }
    public decimal Balance { get; set; }
}

我的补丁方法

public void TransferMoney(string billingSrc, string billingDst, decimal money)
    {
        _ctx.DatabaseCommands.Batch(new ICommandData[]
        {                
            new ScriptedPatchCommandData
            {
                Key = billingSrc,
                Patch = new ScriptedPatchRequest
                {
                    Script = @"this.Balance -= money;",
                    Values = {{"money", money}}
                }
            },
            new ScriptedPatchCommandData
            {
                Key = billingDst,
                Patch = new ScriptedPatchRequest
                {
                    Script = @"this.Balance += money;",
                    Values = {{"money", money}}
                }
            }
        });
    }

2 个答案:

答案 0 :(得分:0)

您可以使用output()方法将值发送回用户。

答案 1 :(得分:0)

自RavenDb v3以来,ScriptedPatchRequest中可用的预定义JavaScript函数集具有方法output(message),允许调试补丁并在输出中打印传递的消息。请参阅v3.0v3.5v4.0的文档。

见下面的例子:

var balancePatch = dbSession.Advanced
    .DocumentStore
    .DatabaseCommands
    .Patch(
        billingDst /* document ID */,
        new ScriptedPatchRequest
        {
            Script = @"this.Balance += money; output(this.Balance);",
            Values = {{"money", money}}
        });

// Reading the debug output
var balance = balancePatch["Debug"].Values().First().Value<decimal>();