在单独的类文件中分离db连接不起作用

本文关键字:分离 db 连接 不起作用 文件 单独 | 更新日期: 2023-09-27 18:14:23

新手需要帮助。我正在尝试使用Bolt构建一个带有neo4j . net驱动程序的原型。我对原型的目的是在数据库中构建用于创建和搜索的多种方法,但只有一种方法可以连接到数据库-这里我不断遇到问题。我整个周末都在谷歌上搜索示例,教程和遍历文档,现在我需要你的帮助。

Programs.cs

using System;
using DTUneo4jConsoleApp.Db;
namespace DTUneo4jConsoleApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            MyProperties something = new MyProperties();
            neo4jdb session = new neo4jdb();            
            session.Run($"CREATE (a:Person {{name:'{something.Name}', title:'{something.Title}'}})");
            var result = session.Run($"MATCH (a:Person) WHERE a.name = '{something.Name}' RETURN a.name AS name, a.title AS title");
            foreach (var record in result)
            {
                Console.WriteLine($"{record["title"].As<string>()} {record["name"].As<string>()}");
            }
            Console.ReadKey();
        }
    }
    public class MyProperties
    {
        public string Name { get; set; }
        public string Title { get; set; }
    }
}

db.cs

using Neo4j.Driver.V1;
namespace DTUneo4jConsoleApp.Db
{
    public class neo4jdb
    {
        public static void Connection()
        {
            using (var driver = GraphDatabase.Driver("bolt://localhost", AuthTokens.Basic("user", "pass")))
            using (var session = driver.Session())
            {
            }
        }
    }
}

当我实例化neo4jdb session = new neo4jdb();时,我没有从驱动程序中获得即Run()方法。

我希望有人能指引我正确的方向。

在单独的类文件中分离db连接不起作用

我这样做:

public static List<IStatementResult> ExecuteCypher(List<Statement> statements)
{
    List<IStatementResult> results = new List<IStatementResult>();
    using (var driver = GraphDatabase.Driver("bolt://localhost", AuthTokens.Basic("user", "pass")))
    {
        using (var session = driver.Session())
        {
            using (var tx = session.BeginTransaction())
            {
                foreach (var statement in statements)
                {
                    results.Add(tx.Run(statement));
                }
                tx.Success();
            }
        }
    }
    return results;
}

用法:

MyProperties something = new MyProperties();
var createCypher = new Statement($"CREATE (a:Person {{name:'{something.Name}', title:'{something.Title}'}})");
var matchCypher = new Statement($"MATCH (a:Person) WHERE a.name = '{something.Name}' RETURN a.name AS name, a.title AS title");

var statements = new List<Statement>();
statements.Add(createCypher);
statements.Add(matchCypher);
var results = ExecuteCypher(statements);
//you can now query result for each statement or
//your query your desired result
foreach (var record in results.Last())
{
    Console.WriteLine($"{record["title"].As<string>()} {record["name"].As<string>()}");
}

通过这种方式,我还可以在单个事务中创建多个记录,并获得所有这些记录的结果。