Neo4j IDriver上在哪里/何时调用Dispose()?

时间:2019-06-04 19:41:31

标签: c# neo4j neo4j-bolt

我正在从c#服务创建节点和关系,但我不确定何时应该调用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 :(得分:0)

任何实现IDisposable的对象都可以用using语句实例化,在该块的末尾,该对象将被处置(您已经使用session进行了处理) ),因此无需显式调用它。

有关更多信息,请参见Using objects that implement 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 + "'})");             
    }
}

答案 1 :(得分:0)

考虑创建连接(驱动程序)并将其作为依赖项传递到包含数据操作方法(创建节点,创建关系等)的类中。

如果这里的所有内容都在单个类中,则可以使该类IDisposable并在其构造函数中创建驱动程序,然后将驱动程序Dispose方法作为类Dispose方法的一部分进行调用。

完成针对给定服务请求的Neo4J DB上的所有工作后,就可以处置驱动程序和连接。