我刚刚开始学习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,并且序列化很好。
答案 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中的修改过的驱动程序,我能够完全满足我的需求。