2016-10-23 4 views
0

ルーキーここで助けが必要です。私はボルトを使ってneo4j .NETドライバでプロトタイプを構築しようとしています。このプロトタイプの私の目的は、dbの作成と検索のための複数のメソッドを構築することですが、dbに接続するための1つのメソッドだけです。ここでは問題が継続しています。私は例、チュートリアルのすべての週末にgoogledし、ドキュメントを通過し、今あなたの助けが必要です。別のクラスファイルでの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()方法を得ることはありません。

誰かが私を正しい方向に導くことができたら幸いです。

答えて

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

をこのように私はまた、単一のトランザクションで複数のレコードを作成し、同様にすべてのそれらの結果を得ることができます。

+0

本当にうまく見えます。ありがとうございました。いったん質問してもばかげてしまうかもしれませんが、あなたは "void"と言っていますが、 'var results = ExecuteCypher(statements);'は出力を期待しています。それは私のためにはうまくいかず、 'public static List ExecuteCypher(List 文)'に設定して試してみましたが、'results 'オブジェクトを返します。あなたはそれをどのように扱ったか、以前に遭遇したかについていくつかの光を投げることができますか? – APDK85

+0

私はExecuteCypher関数を更新しました。これは今すぐ動作するはずです。 –

+0

今も私のために働いた。私は自分の側でいくつかのエラーを見つけました。私はトランザクションのforループに近すぎるreturn文を持っていたので、それをもう少し動かして結果も返すことができました。また、私は 'using System.Linq;'をインクルードする必要がありました。これは私のアプリケーションの一部ではありませんでした。ご協力ありがとうございました。感謝します。 – APDK85

関連する問題