サードパーティの開発者からのWinformsコントロールがあり、そのデータをMongoDBに直接保存したいと考えています。これは、リソースのリストと予定のリストを含むガントチャートです。アポイントメントには、アポイントメントのリソースへのマッピングを担当するリソースのリストもあります。
ストレージを簡素化するために、「PlanningDocument」というクラスを作成しました。
public class PlanningDocument
{
[BsonId]
public ObjectId Id { get; set; }
public string Name { get; set; }
public ResourceCollection Resources { get; set; }
public ItemCollection Schedule { get; set; }
}
ドキュメントはデータベースに正しく保存されます(データベースの内容を確認するためにMongoVUEを使用しています)。ただし、「スケジュール」コレクションのアイテムには、プログラムの実行時のように、リソースへの参照が含まれていません。
オブジェクト間の参照関係を保存するにはどうすればよいですか?
編集:より具体的な例で何をしたいのかを説明しようと思います:
public class Identity
{
public string Id;
public Identity()
{
Id = Guid.NewGuid().ToString();
}
}
public class Thing : Identity
{
public string Name = "";
}
public class Drawer : Identity
{
public List<Thing> SomeThings;
public List<Thing> AdditionalThings;
public Drawer()
{
SomeThings = new List<Thing>();
AdditionalThings = new List<Thing>();
}
}
私はこれらのクラス「Thing」と「Drawer」を持っています。ドロワーには、「SomeThings」と「AdditionalThings」にThingsを含めることができます。
var d = new Drawer();
d.AdditionalThings.Add(new Thing() { Name = "Thing 1"});
d.AdditionalThings.Add(new Thing() { Name = "Thing 2" });
d.AdditionalThings.Add(new Thing() { Name = "Thing 3" });
d.SomeThings.Add(new Thing() { Name ="Thing A"});
d.SomeThings.Add(d.AdditionalThings[0]);
同じThingを両方のリストに保存すると(ここで「Thing1」を使用した場合のように)、MongoDBはThing1のコピーを保存します-参照ではありません。
私の質問は次のとおりです。MongoDBとC#ドライバーにコピーではなく参照をここに保存させる一般的な方法はありますか?
よろしくお願いしますAchim