【问题标题】:Updating a property on a saga outside of the saga在 saga 之外的 saga 上更新属性
【发布时间】:2013-12-03 20:57:46
【问题描述】:

我需要在 saga 之外对我的 saga 文档进行编辑。我正在尝试进行简单的属性更新,即:

                SaleSaga saga = session.Load<SaleSaga>(id);
                saga.SaleSagaTaskId = taskId;
                session.SaveChanges();

这不起作用,我最终解决了这个问题。

    {"Entity Messages.SaleSaga had document key 'salesaga/d6b639c4-78a1-4be6-8e44-a283010b11a9' 
but now has document key property 'salesagas/d6b639c4-78a1-4be6-8e44-a283010b11a9'
.\r\nYou cannot change the document key property of a entity loaded into the session"}

我不确定为什么要在“salesagas”的末尾添加一个“s”。我不知道解决这个问题的最佳方法,任何帮助将不胜感激。

编辑:这是针对 NServiceBus 传奇,在尝试将编辑后的文档保存回 RavenDB 时发生错误。

【问题讨论】:

  • 我尝试打补丁,但结果是某种 URL:Newtonsoft Json 序列化程序出现“\bulk_docs”错误。
  • 这是一个 NServiceBus 传奇吗?还是其他框架?
  • 抱歉,这是一个 NServiceBus 传奇,尝试从 RavenDB 编辑文档时发生错误。

标签: ravendb nservicebus


【解决方案1】:

NServiceBus Saga Persister 使用与 Raven 默认约定不同的约定来存储 saga。 Raven 默认约定是采用类名并将其复数。显然 NServiceBus 没有这样做。因此,您以完全不同的方式访问数据是不匹配的。

您可能希望重用 NServiceBus Saga Persister 类。 Saga 持久化代码可以在这里找到:

https://github.com/Particular/NServiceBus/tree/4.2.0/src/NServiceBus.Core/Persistence/Raven

【讨论】:

    【解决方案2】:

    原始对象是如何编写的?在我看来,这些数据的读取者和写入者可能是两个不同的系统,或者这个系统的两个不同版本,并且文档约定发生了变化。

    要么使用原始约定,要么使用字符串标识符而不是 Guid。

    【讨论】:

    • 我想我不确定你在问什么。我们正在更改 saga 上的标识符,这就是在 saga 处理程序之外编辑 saga 的原因。它发生在同一个命名空间中,我要解决的是为什么它将原始文档路径从“SaleSaga”更改为“SaleSagas”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2012-02-13
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多