Первоначальная проблема связана с тем, что старый код, который вы использовали, имел код Syn c в пакете Neo4j.Driver
, начиная с 4.x
и далее пакет Neo4j.Driver
содержит только Asyn c код.
Существует пакет Neo4j.Driver.Simple
(https://www.nuget.org/packages/Neo4j.Driver.Simple/), который будет действовать так же, как и версии 1.7x
. В качестве краткого примечания - невозможно удалить пакет из Nuget - как только он опубликован, он всегда там - 1.7.2
здесь: https://www.nuget.org/packages/Neo4j.Driver/1.7.2 - в худшем случае - он может быть скрыт - но в этом случае вам просто нужно явно запросить версию. Так что вам не нужно беспокоиться о сохранении старых версий.
Я написал 3 примера (ниже), которые показывают использование нового драйвера от VB с выбранных углов, используя только пакет Neo4j.Driver
и используя пакет Neo4j.Driver.Simple
. Все 3 из них нуждаются в следующих Import
заявлениях (и это основные c Console
приложения). Кроме того, ни один из них не нуждается в параметре ConfigBuilder
.
'The imports
Import System
Import Neo4j.Driver
Import System.Threading.Tasks
Neo4j.Driver.Simple
версия
Поскольку это наиболее близко к версии 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
пакет - с использованием Asyn c
Этот маршрут требует от вас использования Asyn c / Await:
'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
Недостатками являются то, что вы сами должны контролировать жизненный цикл объектов Session
и Driver
- то есть вы не можете просто используйте оператор Using
: /
Neo4j.Driver
package - Asyn c код в Syn c way
Это наихудший вариант развития событий, так как он включает в себя в основном син c - уточняющий асиновый c код, использующий .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
Вам все равно придется управлять жизнью цикл экземпляров Session
и Driver
.
Надеюсь, это поможет