2014-12-28 3 views
0

문자열을 만들고 Neo4jClient의 ExecuteCypherResults API에 전달한 후 CypherQuery를 실행하려고 시도했습니다. 나는 노드와 적절한 레이블을 동적으로 만들 필요가 있기 때문에 이것을 시도했다. Paramter Substituion은 레이블에 적용 할 수 없기 때문에 사이퍼 쿼리 문자열을 만들어 실행하려고했습니다. 컴파일러 오류 메시지 : CS0411 : 메서드의 형식 인수 'Neo4jClient.IRawGraphClient.ExecuteGetCypherResults (Neo4jClient.Cypher .CypherQuery)'사용에서 유추 할 수없는 실행할 때neo4jClient에서 Cypher 쿼리를 문자열로 실행할 수 없습니다.

String qry=""; 
qry="Create n:Person"; 
GraphClient client=new GraphClient(new Uri("localhost:7474/db/data")); 
client.Connect(); 
var results = ((IRawGraphClient)client).ExecuteGetCypherResults(new CypherQuery(qry,null, Neo4jClient.Cypher.CypherResultMode.Projection)); 

나는 다음과 같은 오류가 발생합니다. 형식 인수를 명시 적으로 지정하십시오.

이 점에서 어떤 도움이 좋을 것입니다 ..

답변

2

첫째, 동적 레이블을 할당 할 필요하면 Neo4jClient에게 유창한 API 및 다른 헬퍼의 사용을 피하는 이유가 아니라고 내 의견이다. 주의 할 점은 코드를 가능한 주입 취약점에 노출시키지 않으면 서 Cypher의 레이블 부분 만 동적으로 빌드/포맷 할 수 있다는 것입니다.

그러나, 나는 위의 코드에 두 가지 문제가 있다고 생각, 더 구체적으로 질문을 해결하기 위해 :

  1. 귀하의 Cypher syntax 때문에 괄호가 누락으로 잘못을하고 결과를 반환하지 않는 문을 CREATE RETURN 절이 없습니다. 원하는 경우 Cypher 구문을 CREATE (n:Person) RETURN n과 같이 변경해야합니다.
  2. ExecuteGetCypherResults 메서드에는 반환 할 결과의 유형을 나타내는 제네릭 형식 매개 변수가 필요합니다. 위에서 작성하려고하는 노드의 특성을 추측하기보다는 Neo4jClient 소스의 relevant tests을 참조하여이 메소드 사용 방법에 대한 예제를 얻으십시오. 메서드 호출은 ExecuteGetCypherResults<Person>(...)과 비슷한 모양이 필요합니다. 여기서 Person은 적절한 형식입니다.

마지막으로, 난 그냥 강조를 위해 다시 원점으로 돌아갑니다 - Neo4jClient의 저자가 말한대로,이 방법은 매우을 권장하지 않습니다. 어떤 이유로 든이 방법을 고집한다면 정말로 Neo4jClient를 버리고 Neo4j 서버 REST API를 직접 래핑하는 것이 더 나을 것을 권한다. Neo4jClient 소프트웨어는 작동하도록 설계되었지만 동시에 모든 이점을 얻지 못했습니다.

+0

귀하의 조언에 많은 감사를드립니다. 이 필요성이 제기 된 전체 솔루션에서 단 하나의 인스턴스였습니다. Neo4jclient를 광범위하게 사용하여 아키텍처와 가치를 높이 평가했습니다. Neo4JClient는 Exception을 제외하고이 예외를 처리하기위한 API를 이미 제공했으며 커뮤니티를 사용하여 도움을 얻으려고했습니다. 도움과 조언에 다시 한 번 감사드립니다. – cheenu

+0

그럼 문제를 해결 했습니까? – Pat

관련 문제