0

我正在考虑移植一个小型项目以使用 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,但是我必须单独查询每个子位置。这只完成一次,然后保存在内存中,因为有一张巨大的地图,其中包含所有可能的位置和所有可能的路线,因此可以在点之间找到快速路径。

可能是位置和道路不适合文件存储方式的情况,可以以其他方式存储......

4

1 回答 1

1

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

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

可能是位置和道路不适合文件存储方式的情况,可以以其他方式存储......

鉴于您描述的情况,我建议您查看图形数据库。有几个流行的,包括Neo4J、微软的Trinity、sones 的GraphDB和许多其他的。

于 2011-11-13T08:51:02.413 回答