MongoDb c#驱动支持循环引用



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

我最初尝试了NoRM,它有一个分支支持循环引用并且工作得很好,但是我找不到任何文档来说明官方c#驱动程序是否支持它。

这种情况和为什么我有一个循环引用是因为我有一个位置对象,它包含一个道路列表,每条道路都有一个到另一个位置的链接。它非常类似于pathfinder中的一组简单节点。

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

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

我知道一个折衷办法是去掉location对象,用一个引用location的Id代替,但是我必须单独查询每个子location。这只需要做一次,然后保存在内存中,因为有一个巨大的地图,包含所有可能的位置和所有可能的路线,所以可以快速找到点之间的路径。

可能是Location和Roads不适合文档存储方式,可以用另一种方式存储…

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

当然,即使有"引用"支持,这些驱动程序仍然会执行多个查询。

可能是Location和Roads不适合文档存储方式,可以用另一种方式存储…

考虑到你所描述的情况,我建议使用图形数据库。有几个流行的,包括Neo4J,微软的Trinity, sones的GraphDB和许多其他的。

最新更新