c# - 使用事件存储客户端 API (.NET),如何写入流并将一个事件链接到另一个事件?

标签 c# eventstoredb

我已经设置了Event Store ,并且可以愉快地将事件写入流、订阅和读取历史事件,一切正常。

我可以看到在传递给我的订阅处理程序方法的 ResolvedEvent 中有一个 Link 属性,但我想知道当我写入流时如何,我要“设置”这个属性吗?

我已经尝试设置各种元数据属性(使用 JSON 表示法),查看源代码,但没有找到任何有效的方法。

有可能我正在以错误的方式解决这个问题,以及我正在尝试做的事情(将事件写入流,然后将第二个事件链接到第一个事件,以便我可以找到“回复”稍后)应该以另一种方式完成。

最佳答案

我不认为 Link 是您认为的意思? (除非您可以从文档中引用它实际上应该做的事情)

该链接用于从各种其他流创建的投影。

例如:

当您启用 EvenStore 中的所有投影时,您将获得开箱即用的组投影。此投影通过按“group-id”命名约定对流进行分组来工作

考虑将多个聚合保存到它们自己的流中

  • 客户 10001
  • 客户 10002
  • 客户 10003

这很好,但是您如何订阅发生在任何这些流上的任何事件。这就是内置的组投影发挥作用的地方

您订阅 $ce-customer 流,这是一个投影。

当您真正阅读该投影时,您将得到的只是指向原始事件的链接。这就是我所说的 LINK,您可能对此感到困惑。

所以您知道 .NET 客户端 resolveLinkTos 中的选项

 Task<EventReadResult> ReadEventAsync(string stream, long eventNumber, bool resolveLinkTos);

如果您在 resolveLinkTos 上将其设置为 true,则原始事件将在流数据中返回(而不仅仅是原始事件的链接)。

因此它将返回所有链接流中的所有数据。

关于c# - 使用事件存储客户端 API (.NET),如何写入流并将一个事件链接到另一个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50906995/

相关文章:

c# - 无法连接到已配置的开发 Web 服务器

c# - 计算任意实数的百位

c# - EF 在自动迁移期间保留现有数据

c# - Xamarin 布局与 Xamarin 表单 ContentPage XAML

http - 如何仅通过一个 HTTP 请求从事件存储流中获取最后一个事件?

c# - C# 中的抽象方法参数逆变?

domain-driven-design - 如何使用 EventStore 在银行账户 DDD 风格之间进行资金转账?

encryption - 如何加密光盘上的 EventStore?

elasticsearch - 使用EventStore和ElasticSearch实现CQRS

docker - eventstore 容器在启动时存在