MongoDb和自引用对象

时间:2010-11-12 00:52:28

标签: c# .net mongodb-.net-driver mongodb

我刚刚开始学习mongo db并且想知道我是否做错了......我有两个对象:

public class Part 
{
    public Guid Id;
    public ILIst<Materials> Materials;
}

public class Material
{
   public Guid MaterialId;
   public Material ParentMaterial;
   public IList<Material> ChildMaterials;
   public string Name;
}

当我尝试保存此特定对象图时,由于循环引用,我收到堆栈溢出错误。我的问题是,有没有办法解决这个问题?在WCF中,我可以将datacontract上的“IsReference”属性添加为true,并且序列化很好。

4 个答案:

答案 0 :(得分:1)

你在用什么司机?

在NoRM中,你可以像这样创建一个DbReference

public DbReference<Material> ParentMaterial;

Mongodb-csharp不提供强类型的DbReferences,但您仍然可以使用它们。

public DBRef ParentMaterial;

您可以使用Database.FollowReference(ParentMaterial)跟踪参考。

答案 1 :(得分:1)

仅供将来参考,NoSQL ODB可以很好地处理非嵌入在子文档结构中的对象之间的引用,这通常用于处理任意复杂对象模型中的透明关系。

如果你熟悉Hibernate,想象一下,如果没有任何映射文件AT ALL,并且由于在幕后没有运行时JOIN,性能会提高几个数量级,所有关系都会以b树查找的速度解决。

这是来自Versant的video(披露 - 我为他们工作),所以你可以看到它是如何运作的。

这在开始时有点无聊,但是显示了采用Java应用程序并使其在ODB中持久化的每一步......然后使其容错,分布式,执行一些并行查询,优化缓存负载等...

如果你想跳到很酷的部分,跳过大约20分钟,你将避免构建应用程序,只是看看动态演化模式,为任何现有应用程序添加分发和容错是多么容易) :

答案 2 :(得分:0)

如果你想存储它们之间有关系的对象图,需要多个“连接”来得到答案,你最好使用SQL风格的数据库。 MongoDB和其他人的以文档为中心的方法可能会以不同的方式构建它。

查看MongoDB nested sets,其中提出了一些表示此类数据的方法。

答案 3 :(得分:0)

通过使用NoRM mongodb中的修改过的驱动程序,我能够完全满足我的需求。