我需要对传奇之外的传奇文档进行编辑。我正在尝试进行简单的属性更新:
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时发生错误。
答案 0 :(得分:3)
NServiceBus Saga Persister使用不同的约定来存储传奇,而不是Raven默认约定。 Raven默认约定是获取类名并将其复数。显然NServiceBus没有这样做。因此,您可以通过以完全不同的方式访问数据来实现不匹配。
您可能希望重用NServiceBus Saga Persister类。 Saga持久性代码可以在这里找到:
https://github.com/Particular/NServiceBus/tree/4.2.0/src/NServiceBus.Core/Persistence/Raven
答案 1 :(得分:0)
原始对象是如何写的?在我看来,这个数据的读者和作者可能是两个不同的系统,或者这个系统的两个不同版本,并且文档约定已经改变。
使用原始约定,或使用字符串标识符而不是Guid。