使用官方c#驱动程序在mongodb中保存具有双向关系的对象

我有两个这样的课:

public Class Company { public IList Employees; } public Class Employee { public Company WorkPlace; } 

当我想保存类公司的对象时:

 MongoDatabase Database = MongoServer.GetDatabase("db"); var workPlace = new Company(); var employee = new Employee { WorkPalce = workPlace} workPlace.Employees = new List{ employee }; Database.GetCollection("company").Save(workPlace); 

将抛出StackOverFlowexception。

这是因为你有一个由相互引用的类形成的循环,显然驱动程序没有能力处理这个问题,我不相信它应该。

您需要决定如何在数据库中建模此数据。
如果您有两个集合,一个是公司,另一个是员工,那么在数据级别,您应该只包括引用的ID。

如果您只是拥有一个公司集合,那么您只需要更改员工类以引用带有id而不是对象引用的公司。

这只需要在数据库中进行,但您可以在c#代码中扩展模型以自动添加对象引用或延迟加载它等(避免选择N + 1问题),具体取决于适合的情况。

谷歌小组也提出了这个问题:

https://groups.google.com/group/mongodb-user/browse_thread/thread/4ea7c6885bfb4f33#

那里还有一些额外的答案。

我建议,试试kundera。 它应该能够为Mongo处理这种情况。

https://github.com/impetus-opensource/Kundera在git@github.com上查看kundera-examples:impetus-opensource / Kundera-Examples.git

Interesting Posts