私の同僚は、更新が元に戻されるという非常に問題を抱えていました。私たちが行った更新は、すべてのドキュメントにプロパティを追加し、次にこのプロパティのドキュメント固有の値を追加することでした。SaveConfiguration()を呼び出し、RavenStudioで変更が行われていることを確認しました。しばらくして、いくつかの文書はそれの新しい財産を失いました。
ロギングをオンにすることにしたので、NLog.configファイルを追加し、ロギングを開始するためにweb.configに触れました。もちろん、これによりアプリケーションが再起動され、「出来上がり」、更新がRavenStudioに再び表示されました。
しばらくするとレイヴンスタジオから姿を消したので、これはスタジオの問題だと思いました。そのため、テストコントローラーのデータベースからオブジェクトを取得しようとしましたが、残念ながら、ここでもオブジェクトにプロパティ値がないため、スタジオの問題だけではありませんでした。
ロギングをオンにして、特定のタイプのドキュメントを再度更新し、ログとスタジオに従って、実際にドキュメントを更新しました。その後間もなく、追加されたプロパティを失うことでドキュメントが元に戻りました(私の同僚はこの時点で泣き始めました-実話)。
後で、これはすべて、ライブWebアプリケーションに古いバージョンのオブジェクトが残っているためであることに気付きました。Webアプリケーションで読み取られたとき、データは追加のプロパティなしで返されました。このため、DocumentSessionはオブジェクトが(公平に)変更されたと考えたようです。したがって、SaveChangesを呼び出すと、これらのオブジェクトでさえ、追加のプロパティなしでデータベースに書き込まれました。
私の結論は正しいですか?この問題の解決策は何ですか?私はCQRSを考えています。そうすると、読み取りのためにDocumentSessionで「SaveChanges()」を呼び出すことは決してないからです。