Omi*_*-RH 7 c# stack-overflow mongodb bidirectional-relation mongodb-.net-driver
我有两个这样的课:
public Class Company
{
public IList<Employee> Employees;
}
public Class Employee
{
public Company WorkPlace;
}
Run Code Online (Sandbox Code Playgroud)
当我想保存类公司的对象时:
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);
Run Code Online (Sandbox Code Playgroud)
将抛出StackOverFlow异常.
这是因为你有一个由相互引用的类形成的循环,显然驱动程序没有能力处理这个问题,我不相信它应该.
您需要决定如何在数据库中建模此数据.
如果您有两个集合,一个是公司,另一个是员工,那么在数据级别,您应该只包括引用的ID.
如果您只是拥有一个公司集合,那么您只需要更改员工类以引用具有id而不是对象引用的公司.
这只需要在数据库中发生,你可以在c#代码中扩展你的模型,自动添加对象引用或延迟加载它等(避免选择N + 1问题),具体取决于适合的情况.