我有一个来自第 3 方开发人员的 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>();
}
}
我有这些类“东西”和“抽屉”。抽屉可以包含“SomeThings”和“AdditionalThings”中的东西。
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]);
当我在两个列表中存储相同的事物时(就像这里的“事物 1”一样),MongoDB 存储事物 1 的副本 - 而不是引用。
我的问题是:是否存在使 MongoDB 和 C# 驱动程序在此处存储引用而不是副本的通用方法?
提前感谢阿奇姆