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