MongoDb C # Драйвер поддерживает циклические ссылки? - PullRequest
0 голосов
/ 11 ноября 2011

Я пытался перенести небольшой побочный проект на использование 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 Ответ

1 голос
/ 13 ноября 2011

Официальный драйвер C # вообще не поддерживает "ссылки".Значением поля может быть ObjectID, но концепция соединений или ссылок на самом деле не реализована в официальном драйвере C #.

Конечно, даже при поддержке «ссылки» эти драйверы все равно будут выполнять несколькозапросы.

Это может быть случай, когда Местоположение и Дороги не подходят для хранения документов и могут храниться другим способом ...

Учитывая случаиВы описали, я бы посоветовал посмотреть на базу данных графа.Есть несколько популярных, включая Neo4J , Microsoft Trinity , sones ' GraphDB и множество других.

...