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

时间:2016-10-23 15:37:22

标签: c# .net neo4j

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

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()方法。

我希望有人可以指导我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:0)

我这样做:

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>()}");
}

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