Я рассматривал перенос небольшого побочного проекта для использования Mongo, так как использование Nhibernate для текущего сценария становилось все более и более трудоемким.
Сначала я попробовал NoRM, и у него была ветка, которая поддерживала циклические ссылки и работала нормально, однако я не могу найти никакой документации, указывающей, поддерживает ли ее официальный драйвер С#.
Ситуация и почему у меня есть циклическая ссылка, потому что у меня есть объект местоположения, который содержит список дорог, каждая дорога имеет ссылку на другое местоположение. Это очень похоже на простой набор узлов в навигаторе.
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; }
}
Теперь проблема в том, что у меня есть целый мир, построенный из этих объектов (у них больше свойств в реальном сценарии), и все они взаимосвязаны, однако, не имея возможности обрабатывать циклические ссылки, я не уверен, как я могу решить эту проблему, поскольку каждая дорога должна знать начальную и конечную точки.
Я знаю, что один компромисс состоит в том, чтобы просто избавиться от объекта местоположения и вместо этого иметь идентификатор, который ссылается на местоположение, но тогда мне нужно запрашивать каждое подместоположение по отдельности. Это делается только один раз, а затем сохраняется в памяти, так как есть огромная карта, содержащая все возможные местоположения и все возможные маршруты, поэтому между точками можно найти быстрые пути.
Возможно, расположение и дороги не подходят для хранения документов и могут храниться другим способом...