0

我正在从 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() 都会出错,所以我不想把它放在那里。我只是展示我最初拥有的东西,并就最好的放置位置征求建议。)

4

2 回答 2

0

任何实现的对象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 + "'})");             
    }
}
于 2019-06-04T20:11:28.767 回答
0

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

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

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

于 2019-06-04T20:17:43.660 回答