如何处理MongoDB中的C#对象引用?

时间:2013-08-12 01:21:52

标签: c# mongodb

我想知道如何在多个位置使用对象时如何处理。给出以下代码(仅示例代码): -

 public class Group
    {          
        public ObjectId Id { get; set; }
        public string Name { get; set; }
        public List<Person> People { get; set; }
        public List<Meeting> Meetings { get; set; }
    }

    public class Meeting
    {          
        public string Subject { get; set; }
        public List<Person> Attendees { get; set; }
    }

    public class Person
    {            
        public string Name { get; set; }
    }

如果我将该组存储为mongodb文档,它将序列化所有人和会议。但是,可以在人员列表中以及作为会议的与会者引用相同的Person对象。但是,一旦序列化,它们就会变成单独的如何在人员列表和会议列表中保持相同的“人员”对象?

或者有更好的方法对此进行建模吗?可以做的一件事是将“人物”放在一个单独的文档中并嵌入/引用它?然后开始创建越来越多的单独集合,理想情况下我想在单个文档中维护引用。

或者在文档中我应该为每个人提供一个主列表,然后只在“会议”中存储ID列表并使用某种帮助方法从主列表中解析Id?可以做,但有点难看。

1 个答案:

答案 0 :(得分:2)

我不是MongoDB的专家,但我认为在这种情况下,这些项目中的每一项都应该是一个单独的集合,其引用可以获得您所追求的结果。

会议具有组ID和人员ID与会者列表。 组具有人员ID成员(人员)的列表。 如果一个人只能属于一个组,那么他们可以拥有一个组ID。

一旦他们进入数据库,您对现有设计的唯一选择就是检查名称相等性,正如您所说,可以这样做,但似乎不是正确的方法。

基本上,您使用嵌入式关系模型以及如何在“组”和“会议”中存储“人员”,但如果您想要两者都使用相同的“人员”对象,则需要使用参与者或两者的参考。这对我来说似乎是最简单的方法,而不是与标准行为“打架”。