私は永続化のために RavenDB を使用する共同ドキュメント編集ツールに取り組んでいます。私のドメインには、次のようなドキュメント クラスがあります。
public class Document
{
public string Id { get; private set; }
public string Name { get; set; }
public IRevision CurrentRevision {get; private set; }
public string Contents {get { return CurrentRevision.GenerateEditedContent(); }}
}
ご覧のとおり、このドキュメントには、次のような IRevision オブジェクトを指す CurrentRevision プロパティがあります。
public interface IRevision
{
IRevision PreviousRevisionAppliedTo { get; }
IRevision NextRevisionApplied { get; set; }
Guid Id { get; }
string GenerateEditedContent();
}
したがって、基本的な考え方は、現在のリビジョンをチェックアウトすることによってドキュメントのコンテンツがオンザフライで生成され、次にその親リビジョンがチェックされるというものです。
そのままでは、RavenDB は、このオブジェクト参照のチェーンを必要な方法で永続化することを処理していないようです。Session.Store(document) を呼び出すだけでそれを永続化しようとしており、関連するリビジョンのリストも保存されることを望んでいます。カスタムシリアライザーのような RavenDB フレームワークのいくつかの部分を調べましたが、希望どおりにデータをデシリアライズおよびリシリアライズできる明確なパスがわかりません。この状況を処理するための良い方法は何ですか。