現在のシナリオでNhibernateを使用するのにますます時間がかかるため、Mongoを使用するために小さなサイドプロジェクトを移植することを検討していました。
私はもともとNoRMを試してみましたが、循環参照からのサポートがあり、正常に機能するブランチがありましたが、公式のc#ドライバーがサポートしているかどうかを示すドキュメントが見つかりません。
状況と循環参照がある理由は、道路のリストを含むロケーションオブジェクトがあり、各道路には別のロケーションへのリンクがあるためです。これは、パスファインダーの単純なノードのセットと非常によく似ています。
public class Location
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Road> Roads { get; set; }
}
public class Road
{
public Location From { get; set; }
public Location To { get; set; }
}
問題は、これらのオブジェクトから全世界が構築され(実際のシナリオではより多くのプロパティがあります)、すべてが相互にリンクしていることですが、循環参照を処理できなければ、この問題をどのように解決できるかわかりません。各道路は、始点と終点を知っている必要があります。
妥協案の1つは、ロケーションオブジェクトを削除し、代わりにロケーションを参照するIDを設定することですが、各サブロケーションを個別にクエリする必要があります。これは一度だけ行われ、その後メモリに保持されます。これは、すべての可能な場所とすべての可能なルートを含む巨大なマップがあり、ポイント間のクイックパスを見つけることができるためです。
場所と道路がドキュメントストレージアプローチに適していない場合があり、別の方法で保存できます...