当前位置:  开发笔记 > 编程语言 > 正文

RavenDB:异步SaveChanges影响以后的更新?

如何解决《RavenDB:异步SaveChanges影响以后的更新?》经验,为你挑选了1个好方法。

作为学习RavenDB的一部分,我试图根据我每晚下载的列表更新一组股票.

我有一个Stock类,其中Id是股票代码:

public class Stock
{
    public string Id { get; set; }
    public StockStatus Status { get; set; }
}

我正在尝试使用此算法同步列表:

    更新或插入现在下载的所有股票为"StillActive".

    任何上次状态为"活跃"的股票意味着他们不在更新中,需要"删除".

    所有股票仍然"StillActive"成为新的"活跃"股票.

这是实施:

List stocks = DownloadStocks();

using (var session = RavenContext.Store.OpenSession())
{
    foreach (Stock stock in stocks)
    {
        stock.Status = StockStatus.StillActive;
        session.Store(stock);
    }

    session.SaveChanges();

    session.PatchUpdateCutoffNow("Stocks/ByStatus", "Status:Active", "Status", StockStatus.Deleted);
    session.PatchUpdateCutoffNow("Stocks/ByStatus", "Status:StillActive", "Status", StockStatus.Active);
}

PatchUpdateCutoffNow是一个扩展方法,它使用Cutoff现在执行UpdateByIndex:

public static void PatchUpdateCutoffNow(this IDocumentSession session, string indexName, string query, string name, object val)
{
    session.Advanced.DatabaseCommands.UpdateByIndex(indexName, 
        new IndexQuery() { Query = query, Cutoff = DateTime.Now },
        new[]
        {
            new PatchRequest
            {
                Type = PatchCommandType.Set,
                Name = name,
                Value = val.ToString()
            }
        });
}

我最终得到了很多不应该被删除的股票.我的猜测是SaveChanges是异步的,并且在PatchUpdateCutoffNow启动时没有完成,因此当它们应该是"活动"时,我最终得到一些状态为"已删除"的股票.我想IndexQuery截止值不适用,因为SaveChanges不直接反对"Stocks/ByStatus"索引.

有没有办法让SaveChanges同步或以其他方式做到这一点,更符合NoSQL/RavenDB的思维方式?



1> Thomas Freud..:

文档立即存储,但补丁命令适用于尚未更新的索引.也许这有助于插入SaveChanges()和修补:

using (var s = RavenContext.Store.OpenSession()) {
    s
        .Query("Stocks/ByStatus")
        .Customize(c => c.WaitForNonStaleResultsAsOfNow())
        .Take(0)
        .ToArray();
}

顺便说一句,您不需要DatabaseCommands的会话,您可以直接在商店中调用它们.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有