0

サードパーティの開発者からの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

4

1 に答える 1

0

いいえ、参照をC#ドライバーに自動的に保存する方法はありません。これは仕様によるものです。参照を自動的に保存することは、実行時にそれらの参照を自動的に解決することを意味しますが、これは行いません。

「thing」オブジェクトにはIDがあるため、クライアント側で実行するか、位置$演算子とupdate-multiフラグ。

于 2012-07-20T13:25:38.663 に答える