1

我正在使用 Raven 来持久IFindSagas化 saga 并且我想实现,我需要根据 2 个属性找到 saga,SiteId因此EmailAddress无法ConfigureMapping正常工作。该ISagaPersister界面仅允许您通过单个属性查找单个 saga。

我已经实现了这样的传奇查找器

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);
    }
}

所以基本上我在 call 上添加了一个属性,MySagaDataSagaLookupSiteIdand的串联EmailAddress。然后我可以通过这个查找它。这感觉就像一个黑客。有什么方法可以使用 saga 持久化器,我可以通过多个属性获取一个 saga,或者根据一个属性获取一个 saga 列表,然后我可以通过另一个属性进行过滤?

4

1 回答 1

1

IMO 最好通过单个“键”属性进行查找,因为这样您就不需要实现自定义持久性。连接站点 ID 和电子邮件地址可能看起来像一个 hack,但如果你认为这是定义特定 saga 的 ID,那么它是有道理的。传奇数据不是您的领域模型的一部分,它是具有特定要求的基础设施的一部分。但是,您应该考虑这个 saga ID 的定义是否足够唯一。例如,同一站点 ID 中的同一用户的两个 saga 是否有可能同时执行?

于 2012-09-21T02:32:34.877 回答