我已经设置了RavenDB进行评估。我写了一些代码,将一些文档推入其中。然后,我有一个网站,提供这些文件。
全天,我使用Raven Studio修改这些文档中的一些文本,以便在网站上看到更改。
问题:看起来回家过夜后,当我第二天进来时,我的数据库已经改变了 - 我的文件已经恢复到'预先更改'的版本......发生了什么? 我查看了Raven控制台输出,并且我的开发者机器上没有发布更新命令一夜之间(我也不希望有!)
注意:这只是在我的开发机器上运行。
答案 0 :(得分:1)
据我所知,RavenDB中没有代码可以自动撤消提交的写操作,老实说,这真的会吓到我。总而言之这听起来很奇怪,我无法想到实际可能发生的情况。如果再次发生,我建议您将日志文件发送到ravendb支持,因为这将是真正的严重问题。
答案 1 :(得分:1)
我的同事遇到了这个问题,更新被恢复了。我们所做的更新是为所有文档添加属性,然后还为此属性添加特定于文档的值。我们调用了SaveConfiguration()并看到了在Raven Studio中完成的更改。不久之后,一些文件丢失了它的新属性。
我决定打开日志记录,因此添加了一个NLog.config文件,以便开始记录我触摸web.config。这当然重新启动了应用程序,并且“瞧”,更新再次出现在Raven Studio中。
过了一会儿,他们从Raven Studio消失了,所以我认为这是一个工作室问题。因此,我试图在测试控制器中从数据库中检索对象,不幸的是,对象在这里也缺乏属性值,因此它不仅仅是工作室问题。
启用日志记录后,我们再次更新了特定类型的文档,并根据日志和工作室实际更新了文档。此后不久,这些文件再次失去了它的附加财产(我的同事在此时开始哭泣 - 这是真实的故事)。
后来我意识到这一切都是因为我们的实时Web应用程序仍然有旧版本的对象。在Web应用程序中读取数据时,返回的数据没有额外的属性。因此,看起来我们的DocumentSession认为对象已经改变(公平地说),所以当我们调用SaveChanges时,即使这些对象被写入数据库 - 没有它的额外属性。
我的结论是否正确?这个问题的解决方案是什么?我在想CQRS,因为我们永远不会在DocumentSession上调用“SaveChanges()”进行读取。
答案 2 :(得分:0)
亚当 只是确定,你做了修改后调用了SaveChanges()吗?
RavenDB中绝对没有任何内容会导致此行为。