Marten MultiStreamProjection使用异常:查询结果为Null求助
问题排查与解决方案
核心错误原因
你用AggregateStreamAsync查询MultiStreamProjection的结果是错误的——这个方法的作用是聚合单个事件流的状态,而MultiStreamProjection是跨多个事件流、基于所有匹配事件构建的投影,它的结果是作为文档存在的,需要用常规的文档查询接口获取。
修正后的查询代码
把查询Summary的代码替换成下面的逻辑:
using (var s3 = store.QuerySession()) { var a1 = s3.Query<Summary>().FirstOrDefault(x => x.Id == "S1"); Console.WriteLine(a1); }
补充说明
- 你的
SummaryProjection配置本身是正确的:Identity<DetailCreated>(x => x.SummaryId)正确指定了按SummaryId分组聚合,Create和Apply方法的逻辑也没问题。 - 因为你用了
ProjectionLifecycle.Live,每次查询时Marten会实时从事件流中计算投影结果,不需要提前预存到数据库。如果换成ProjectionLifecycle.Async或ProjectionLifecycle.Inline,投影结果会持久化到文档表,查询逻辑保持一致即可。
内容的提问来源于stack exchange,提问作者JonathanPeel
相关产品推荐
相关产品推荐

