我有一个存储库,我在其中插入了一系列事件。
现在我想确保当我插入事件dtos时,同时没有任何新事件。
所以我现在所做的是
但是现在在查询和插入之间存在时间差。我需要将这些组合在一起,以便它是某种交易方式。
有没有办法做到这一点,还是我必须忍受这个差距,并解决基础设施的这个问题?
答案 0 :(得分:1)
我发现了。
我可以将FindOneAndUpdate用作Upsert。可以省略更新值,仅设置SetOnInsert
值
像这样
var builder = new UpdateDefinitionBuilder<Dto>();
var def = builder
.SetOnInsert(x => x.Version, EventVersion)
...
现在,当运行以下更新时,只有在满足我的版本条件时才会插入
collection.FindOneAndUpdate(VersionCondition, updateValues, new FindOneAndUpdateOptions<Event>() {IsUpsert = true});
在此之后,我可以断言返回的文档是否与我想要插入的文档相同。