微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有两个这样的课:
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问题),具体取决于适合的情况.

原文地址:https://www.jb51.cc/csharp/99591.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐