0

我已经建立了一个 RavenDB 进行评估。我写了一些代码,将一些文档推入其中。然后我有一个呈现这些文档的网站。

一整天,我都在使用 Raven Studio 修改这些文档中的一些文本,这样我就可以在我的网站上看到所做的更改。

问题:晚上回家后,当我第二天回来时,我的数据库似乎发​​生了变化——我的文档已经恢复到“更改前”的版本……这是怎么回事??我查看了 Raven 控制台输出,一夜之间我的开发人员机器上没有发出更新命令(我也不希望有!!)

注意:这只是在我的开发机器上运行。

4

3 回答 3

1

据我所知,RavenDB 中没有可以自动撤消已提交的写入操作的代码,老实说,这真的会吓到我。总而言之,这听起来真的很奇怪,我想不出这种情况实际上会发生的情况。如果再次发生,我建议您将日志文件发送给 ravendb 支持,因为这将是一个非常严重的问题。

于 2012-05-02T22:35:04.183 回答
1

我的同事在恢复更新时遇到了这个问题。我们所做的更新是为所有文档添加一个属性,然后还为该属性添加一个文档特定值。我们调用了 SaveConfiguration() 并看到在 Raven Studio 中进行了更改。过了一会儿,一些文件丢失了它的新财产。

我决定打开日志记录,因此添加了一个 NLog.config 文件,为了开始日志记录,我触摸了 web.config。这当然会重新启动应用程序,并且“瞧”,更新再次出现在 Raven Studio 中。

过了一段时间,他们从 Raven Studio 消失了,所以我认为这是工作室的问题。因此,我尝试在测试控制器中从数据库中检索对象,不幸的是,这些对象在这里也缺少属性值,所以这不仅仅是工作室的问题。

打开日志后,我们再次更新了特定类型的文档,根据日志和工作室,我们实际上更新了文档。此后不久,文件又因失去附加财产而恢复原状(我的同事此时开始哭泣——真实的故事)..

后来我意识到这都是因为我们的实时 Web 应用程序仍然有旧版本的对象。在 Web 应用程序中读取数据时,返回的数据没有额外的属性。正因为如此,我们的 DocumentSession 似乎认为对象已经改变(公平地说),所以当我们调用 SaveChanges 时,即使这些对象也被写入数据库 - 没有它的额外属性。

我的结论正确吗?这个问题的解决方案是什么?我在考虑 CQRS,因为这样我们就永远不会在 DocumentSession 上调用“SaveChanges()”进行读取。

于 2012-09-06T16:58:01.120 回答
0

亚当,请确保您在进行修改后是否调用了 SaveChanges()?

RavenDB 中绝对没有任何东西会导致这种行为。

于 2012-05-03T09:17:44.913 回答