Vb.net NET中的Neo4j v4驱动程序错误
使用导入的Neo4j.v1和Neo4j 3.x,我的VB.NET代码运行得非常好 我已经升级到笔记本电脑上的Neo4j 4.01服务器(Community Editon),可以在Neo4j桌面上成功连接和查询。我使用NUGet删除旧的Neo4j引用并添加NEO4J4.01驱动程序。代码不再有效Vb.net NET中的Neo4j v4驱动程序错误,vb.net,neo4j,cypher,Vb.net,Neo4j,Cypher,使用导入的Neo4j.v1和Neo4j 3.x,我的VB.NET代码运行得非常好 我已经升级到笔记本电脑上的Neo4j 4.01服务器(Community Editon),可以在Neo4j桌面上成功连接和查询。我使用NUGet删除旧的Neo4j引用并添加NEO4J4.01驱动程序。代码不再有效 Imports Neo4j.Driver Dim D = GraphDatabase.Driver(uri:=Neo4Lib.Neo4ConnectionString, authToken
Imports Neo4j.Driver
Dim D = GraphDatabase.Driver(uri:=Neo4Lib.Neo4ConnectionString, authToken:=AuthTokens.Basic(Neo4Lib.Neo4UserName, Neo4Lib.Neo4Pswd))
Using session = D.Session()
'query database
Dim rslt = session.run(CQ)
.... processing ...
End Using
它是Using session=D.session()行,错误为
重载解析失败,因为没有可访问的“会话”接受此数量的参数
我已经在研究了背景材料,但看不出问题所在。我在Azure上使用Python代码的Neo4jV4时也遇到过类似的问题
非常感谢建议的修复。解决方案:会话是异步运行的,正如上面Hursey所建议的,它确实需要一个ConfigBuilder参数,即使它是“Nothing”。返回值与我的Neo4j 3.x代码不同,因此我需要编写新的解析代码。。。但我现在有点事要做
Imports Neo4j.Driver
CQ={neo4j cypher query}
Dim D = GraphDatabase.Driver(uri:=Neo4Lib.Neo4ConnectionString, authToken:=AuthTokens.Basic(Neo4Lib.Neo4UserName, Neo4Lib.Neo4Pswd))
Dim cb As ConfigBuilder = Nothing
Using session = D.AsyncSession(cb)
'query database
Dim rslt As System.Threading.Tasks.Task = session.RunAsync(CQ)
{process IResultCursor}
End Using
最初的问题源于您使用的旧代码在
Neo4j.Driver
包中有同步代码,从4.x
开始,Neo4j.Driver
包只包含异步代码
有一个Neo4j.Driver.Simple
package(),它的作用类似于1.7x
版本。作为一个简短的补充说明-不可能从Nuget中删除一个包-一旦发布,它总是在那里-一个1.7.2
在这里:-最坏的情况下-它可能是隐藏的-但在这种情况下,你只需要明确要求版本。因此,您不必担心保留旧版本
我已经写了3个示例(如下),展示了如何从一系列角度使用VB中的新驱动程序,只使用Neo4j.driver
包和Neo4j.driver.Simple
包。这三个应用程序都需要以下Import
语句(它们是基本的Console
apps)。另外-它们都不需要ConfigBuilder
参数
'The imports
Import System
Import Neo4j.Driver
Import System.Threading.Tasks
Neo4j.Driver.Simple
version
由于这是最接近1.7.2
版本的版本,因此我将把它放在第一位:
Sub Main
SyncVersion()
End Sub
Sub SyncVersion()
Dim query = "MATCH (m:Movie) RETURN m"
'NB. Driver could be in a 'Using' on this.
Dim driver = GraphDatabase.Driver(uri:="neo4j://localhost:7687", authToken:=AuthTokens.Basic("neo4j", "neo"))
'Open the session
Using session = driver.Session()
Dim result As IResult = session.Run(query)
For Each record As IRecord In result
Console.WriteLine(record("m").Properties("title"))
Next
End Using
'Close the driver
driver.Dispose()
End Sub
这样做的好处是,它应该与您的代码库紧密匹配,只需对您进行最小的更改
Neo4j.Driver
package-使用异步
此路由确实需要您使用异步/等待:
'Note - This is also declared as Async
Async Sub Main
AsyncVersion()
End Sub
Async Function AsyncVersion() As Task
Dim query = "MATCH (m:Movie) RETURN m"
Dim driver = GraphDatabase.Driver(uri:="neo4j://localhost:7687", authToken:=AuthTokens.Basic("neo4j", "neo"))
'Open the session
Dim session = driver.AsyncSession()
'Get the result cursor
Dim result As IResultCursor = Await session.RunAsync(query)
'Loop through it
While Await result.FetchAsync()
Console.WriteLine(result.Current("m").Properties("title"))
End While
'Close the session
Await session.CloseAsync()
'Close the driver
Await driver.CloseAsync()
End Function
缺点是您必须自己控制会话
和驱动程序
对象的生命周期-即,您不能仅使用使用
语句:/
Neo4j.Driver
package-同步方式的异步代码
这是最糟糕的情况,因为它涉及到基本上同步异步代码,使用.Wait()
和一些非常笨重的ForEach
ing-但我认为它会填充示例:
'Not Async this time
Sub Main
SyncWithAsync()
End Sub
Sub SyncWithAsync()
Dim query = "MATCH (m:Movie) RETURN m"
Dim driver = GraphDatabase.Driver(uri:="neo4j://localhost:7687", authToken:=AuthTokens.Basic("neo4j", "neo"))
'Open the session
Dim session = driver.AsyncSession()
'Get the result cursor
Dim resultTask As Task(Of IResultCursor) = session.RunAsync(query)
resultTask.Wait()
'Loop through it, but as we're 'syncing' an async, we need to wait for 'fetch' to work.
Dim fetchTask = resultTask.Result.FetchAsync()
fetchTask.Wait()
While fetchTask.Result
Console.WriteLine(resultTask.Result.Current("m").Properties("title"))
fetchTask = resultTask.Result.FetchAsync()
fetchTask.Wait()
End While
'Close the session
session.CloseAsync().Wait()
'Close the driver
driver.CloseAsync().Wait()
End Sub
您仍然需要管理会话
和驱动程序
实例的生命周期
希望这有助于排除错误,会话构造函数需要参数。从您链接的文档中,可以通过多种不同的方式配置会话。这是通过在会话构造函数中提供配置来实现的。有关更多详细信息,请参阅第4.4节“会话配置”。我阅读了第4.4节。所有会话配置都有默认值,它们适用于我的场景。因此,它们似乎没有必要。前几节中的所有示例都没有参数,网上其他地方的示例也没有参数。但我会进一步研究这个可能的解决方案。我想你可能需要和Neo4j供应商谈谈。有些东西不合逻辑。您得到的错误表明您需要构造函数中的参数,但我发现的文档和示例表明它不需要提示。。。正如我现在要记录的那样,它确实带来了一个解决方案。不幸的是,我不能相信你是当之无愧的。我认为你可能已经逃脱了
Neo4j.Driver.Simple
包的惩罚——这可能有助于事情的异步方面——尽管你可能仍然存在配置生成器的问题。我仍然不知道如何让ConfigBuilder工作。。。找不到特定的VB.NET示例我放弃并恢复为Neo4j.Driver.v1。幸运的是,我的备份驱动器上有它,因为它在NUGet中不再可用。驱动程序4.0有我无法解决的小故障,并且文档不足以让我解决它。