【发布时间】:2018-01-17 19:37:56
【问题描述】:
我正在使用 Raven 来持久化 saga,我想实现 IFindSagas,我需要根据 SiteId 和 EmailAddress 两个属性来查找 saga,所以 ConfigureMapping 将不起作用。 ISagaPersister 接口只允许您通过单个属性查找单个 saga。
我已经实现了一个像这样的 saga finder
public class MySagaFinder : IFindSagas<MySagaData>.Using<ISomeMessage>
{
public ISagaPersister Persister { get; set; }
public MySagaData FindBy(ISomeMessage message)
{
var lookup = string.Format("{0}__{1}", message.SiteId, message.EmailAddress);
return Persister.Get<MySagaData>("SagaLookup", lookup);
}
}
所以基本上我在MySagaData 上添加了一个名为SagaLookup 的属性,它是SiteId 和EmailAddress 的串联。然后我可以通过这个查找它。这感觉就像一个黑客。有没有什么方法可以使用 saga 持久化器,我可以通过多个属性返回一个 saga,或者根据一个属性返回一个 saga 列表,然后我可以通过另一个属性进行过滤?
【问题讨论】:
-
通常这表明缺少域概念。您的域中的哪些内容由 siteId 和电子邮件标识?
-
一个用户网站邀请,有人建议我可以为每一个生成一个唯一的 id,但我真的不需要这个 id 来做其他事情,并试图避免更多数据
-
我意识到我对此很愚蠢,我正在生成一个随机字符串的验证码并通过电子邮件发送出去。我现在要使用一个 guid,也将它用作 saga 标识符并简化整个过程,谢谢!
-
很好,事情通常会这样结束:)
标签: nservicebus saga