3

I am just starting to learn about mongo db and was wondering if I am doing something wrong....I have two objects:

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;
}

When I try to save this particular object graph I receive a stack overflow error because of the circular reference. My question is, is there a way around this? In WCF I am able to add the "IsReference" attribute on the datacontract to true and it serializes just fine.

4

4 回答 4

1

只是为了将来参考,诸如未嵌入子文档结构中的对象之间的引用之类的事情,由 NoSQL ODB 处理得非常好,NoSQL ODB 通常旨在处理任意复杂对象模型中的透明关系。

如果您熟悉 Hibernate,想象一下,完全没有任何映射文件,并且由于幕后没有运行时 JOIN,因此性能提高了几个数量级,所有关系都以 b-tree 查找的速度解决。

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

一开始有点无聊,但展示了获取 Java 应用程序并使其在 ODB 中持久化的每一步……然后使其具有容错性、分布式、执行一些并行查询、优化缓存负载等……

如果您想跳到最酷的部分,请花大约 20 分钟,您将避免构建应用程序,只需了解动态演变模式、为任何现有应用程序添加分布和容错是多么容易):

于 2011-01-08T23:18:05.397 回答
1

你用的是什么驱动程序?

在 NoRM 中,您可以像这样创建 DbReference

public DbReference<Material> ParentMaterial;

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

public DBRef ParentMaterial;

您可以使用Database.FollowReference(ParentMaterial).

于 2010-11-12T01:04:41.290 回答
0

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

看看MongoDB 嵌套集,它提出了一些表示此类数据的方法。

于 2010-11-12T02:24:27.283 回答
0

通过使用来自NoRM mongodb的修改后的驱动程序,我能够完全完成我需要的工作。

于 2010-11-12T18:22:51.100 回答