【问题标题】:Why does 'IDriver' not contain a definition for 'Session' when using Neo4j in C#?在 C# 中使用 Neo4j 时,为什么“IDriver”不包含“会话”的定义?
【发布时间】:2020-01-03 16:13:43
【问题描述】:

我正在遵循本指南here 来帮助我开始编写一个简单的查询来检索我在本地数据库中建立的一些节点。

我使用的 NuGet 包是 4.0.0,文档是 1.7。我不确定4.0.0是Neo4J的服务器版本还是.NET API版本。

这里的块:

public void GetMedicalDevices () {
   string query = "match (n:MedicalDevices) return n";

   using (var session = _driver.Session()) {
      var data = session.WriteTransaction(tx =>
      {
         var result = tx.Run( query );
         return result;
      });

   }
}

_driver.Session() 是发生此错误的地方,我无法弄清楚。

CS1061 'IDriver' does not contain a definition for 'Session' and no accessible extension method 'Session' accepting a first argument of type 'IDriver' could be found (are you missing a using directive or an assembly reference?)

我不确定我还缺少哪些其他参考资料(如果有的话),或者我正在阅读的文档是否数据不足,Session() 实际上不再存在于“IDriver”上。

这是我用来编写一些 foobar 代码以查看某些工作的整个类。

class HelloBoltDriver : IDisposable {

   private readonly IDriver _driver;

   public HelloBoltDriver (string uri, string user, string password) {
      try {
         _driver = GraphDatabase.Driver(uri, AuthTokens.Basic(user, password));
      } catch (Exception e) {
         Debug.Log(e.Message);
      }
   }

   public void GetMedicalDevices () {
      string query = "match (n:MedicalDevices) return n";

      using (var session = _driver.Session()) {
         var data = session.WriteTransaction(tx =>
         {
            var result = tx.Run( query );
            return result;
         });

      }
   }

   public void Dispose () {
      _driver?.Dispose();
   }

}

【问题讨论】:

  • neo4j 标签要求“在提问时提及 Neo4j 的确切版本”。也许它被重命名为AsyncSession 并且文档还没有跟上?
  • 我打开了 1.7.2 和 4.0.0 包,是的,它被重命名了。请按照该指南暂时降级到 1.7.2。
  • 糟糕,忘记了。我修好了它。我有 NuGet 包 v4.0.0,但我不确定这是否意味着服务器版本或特定 API 版本。我能够挖掘的所有文档似乎都在 1.7 中。
  • 根据NuGet page,21 天前发布了 4.0.0,所以,是的,文档还没有跟上。从指南的版本选择器中选择“4.0-preview”会显示一个仍然使用 Session 的页面,所以这不会有帮助。

标签: c# .net neo4j


【解决方案1】:

Simple Session 作为主驱动扩展的解释是here

你需要安装Neo4j.Driver.Simple package

【讨论】:

    【解决方案2】:

    尝试使用类似的东西:

            private async Task mnu_ClickAsync(object sender, RoutedEventArgs e)
        {
            IDriver driver = GraphDatabase.Driver("neo4j://localhost:7687", AuthTokens.Basic("username", "pasSW0rd"));
            IAsyncSession session = driver.AsyncSession(o => o.WithDatabase("neo4j"));
            try
            {
                IResultCursor cursor = await session.RunAsync("CREATE (n) RETURN n");
                await cursor.ConsumeAsync();
            }
            finally
            {
                await session.CloseAsync();
            }
    
            await driver.CloseAsync();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2019-03-12
      • 1970-01-01
      相关资源
      最近更新 更多