我有两个这样的类(class):

public Class Company
{
    public IList<Employee> 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>{ employee };

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

将引发StackOverFlow异常。

最佳答案

造成这种情况的原因是,您有一个由相互引用的类形成的循环,很明显,驾驶员没有能力来处理此问题,并且我不相信这样做。

您需要确定如何在数据库中对这些数据进行建模。
如果您有两个集合,一个是公司,一个是雇员,那么在数据级别,您应该只包括ID供引用。

如果您只是一个公司的集合,那么您只需要更改雇员类以使用ID而不是对象引用来引用回该公司。

不过,这仅需要在数据库中发生,您可以根据情况选择适合的情况,在C#代码中扩展模型以自动添加对象引用或延迟加载对象引用等(避免像这样做一样选择N + 1问题)。

10-08 03:09