Где / когда место вызова Dispose () на Neo4j IDriver? - PullRequest
0 голосов
/ 04 июня 2019

Я создаю узлы и отношения из службы ac #, и я не уверен, когда будет идеальное время для вызова dispose.У меня есть три метода, которые создают узлы Neo4j и два, которые создают отношения.Они называются сразу после другого.Каждый метод создает новый драйвер.(Разве лучше не создавать новый драйвер в каждом методе?)

createNodes1();
createNodes2();
createNodes3();

createRelationships1();
createRelationships2();

Каждый метод в целом выглядит как фрагмент кода ниже.

internal void addNode(string nodeName, string nodeLabel)
{
    IDriver driver = GraphDatabase.Driver("bolt://localhost:11004", AuthTokens.Basic("neo4j", "Diego123"));
    using (ISession session = driver.Session())
    {
        IStatementResult result = session.Run("CREATE (n:" + nodeLabel + "{name:'" + nodeName + "'})");             
    }
    driver.Dispose();
}

(Вызов Dispose () вВ конце каждого метода выдается ошибка, поэтому я не хочу помещать ее туда. Я просто показываю, что у меня было изначально, и запрашиваю совет о том, где лучше всего ее разместить.)

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Рассмотрите возможность создания своего соединения (драйвера) и передачи его в свой класс, содержащий ваши методы манипулирования данными (создание узлов, создание отношений и т. Д.) В качестве зависимости.

Если здесь все в одном классе, вы можете сделать этот класс IDisposable и создать драйвер в его конструкторе, а также вызвать метод Dispose драйвера как часть вашего класса Dispose.

Вы можете утилизировать драйвер и соединение, когда закончите выполнять всю работу, выполняемую в БД Neo4J для данного запроса на обслуживание.

0 голосов
/ 04 июня 2019

Любой объект, который реализует IDisposable, может быть создан с помощью оператора using, и в конце этого блока объект будет удален (вы уже делаете это с session), поэтому в этом нет необходимости. явно назвать это.

См. Использование объектов, которые реализуют IDisposable для получения дополнительной информации.

using (IDriver driver = GraphDatabase.Driver("bolt://localhost:11004", 
    AuthTokens.Basic("neo4j", "Diego123")))
{
    using (ISession session = driver.Session())
    {
        IStatementResult result = session.Run("CREATE (n:" + nodeLabel + 
            "{name:'" + nodeName + "'})");             
    }
}
...