MongoDb C#驱动程序支持循环引用?

时间:2011-11-11 13:39:55

标签: .net mongodb poco mongodb-.net-driver cyclic-reference

我正在考虑将一个小型项目移植到使用Mongo,因为在当前场景中使用Nhibernate会越来越耗时。

我最初尝试过NoRM,并且有一个支持来自循环引用的分支并且工作正常,但我找不到任何文档来指示官方c#驱动程序是否支持它。

这种情况以及为什么我有一个循环引用是因为我有一个位置对象,其中包含道路列表,每条道路都有一个指向另一个位置的链接。它与路径查找器中的一组简单节点非常相似。

public class Location
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<Road> Roads { get; set; }
}

public class Road
{
    public Location From { get; set; }
    public Location To { get; set; }
}

现在的问题是我有一个由这些对象构建的整个世界(它们在真实场景中有更多属性)并且它们都是互连的,但是无法处理循环引用我不知道如何解决这个问题问题,因为每条道路都需要知道起点和终点。

我知道一个折衷办法就是摆脱位置对象,而是有一个引用该位置的Id,但是我必须分别查询每个子位置。这只做一次,然后保存在内存中,因为有一个巨大的地图,包含所有可能的位置和所有可能的路线,因此可以在点之间找到快速路径。

可能是位置和道路不适合文档存储方法并且可以以其他方式存储的情况......

1 个答案:

答案 0 :(得分:1)

官方C#驱动程序根本不支持“引用”。字段的值可以是ObjectID,但是联接或引用的概念并没有真正在官方C#驱动程序中实现。

当然,即使有“参考”支持,这些驱动程序仍然会执行多个查询。

  

可能是位置和道路不适合文档存储方法并且可以以其他方式存储的情况......

鉴于您所描述的案例,我建议您查看图表数据库。有几个受欢迎的,包括Neo4J,微软的Trinity,sones'GraphDB以及其他许多人。