7

我有两个这样的课程:

public Class Company
{
    public IList<Employee> Employees;
}

public Class Employee
{
    public Company WorkPlace;
}

当我想保存 Company 类的对象时:

MongoDatabase Database = MongoServer.GetDatabase("db");

var workPlace = new Company();

var employee = new Employee { WorkPalce = workPlace}    
workPlace.Employees = new List<Employee>{ employee };

Database.GetCollection<Company>("company").Save(workPlace);

将抛出 StackOverFlow 异常。

4

3 回答 3

8

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

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

但是,如果您只有一个公司集合,那么您只需更改员工类以使用 id 而不是对象引用来引用回公司。

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

于 2011-12-11T06:05:15.380 回答
0

I suggest, try kundera. It should be able to handle such case for Mongo.

https://github.com/impetus-opensource/Kundera take a look at kundera-examples at git@github.com:impetus-opensource/Kundera-Examples.git

于 2011-12-13T07:51:25.817 回答
0

谷歌群组也有人问过这个问题:

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

还有一些额外的答案。

于 2011-12-12T02:40:41.367 回答