如何动态地使用.Net客户端创建节点及其属性? 有点像这样吗?
Node node = new Node();
node.AddProperty("Type", "Domain");
我不想在类中硬编码,即
JsonProperty***("Bar")]***
public string Foo { get; set; }
var myNodeReference = client.Create(new MyNode { Foo = "bar" });
答案 0 :(得分:2)
在可以从Neo4j.org下载页面下载的Neo4j server v2.0 M06版本中,您可以直接在您的Neo4j服务器中使用Cypher查询中的JSON。
示例:
CREATE
(view0:event:view
{
key:'view0',
verb:'view',
past:'has viewed',
present:'is viewing',
future:'will view'
})-[:event]->d16
您可以从我的GitHub存储库中获取以下C#类文件,该文件允许您将Cypher查询直接发送到Neo4j服务器:
您可以通过访问GitHub中的以下C#类文件来查看其用法:
转到“GetRankedNodesForQuery”,我在这里复制了代码。
public static List<IGraphNode> GetRankedNodesForQuery(string index, string luceneQuery, string relationshipLabel, string labelPropertyName, int skip, int limit)
{
var sb = new StringBuilder();
sb.AppendLine("START node=node:{0}(\"{1}\")");
sb.AppendLine("WITH node");
sb.AppendLine("SKIP {2}");
sb.AppendLine("LIMIT {3}");
sb.AppendLine("WITH node");
sb.AppendLine("MATCH n-[{4}]->node");
sb.AppendLine("WITH node, count(distinct n) as size");
sb.AppendLine("RETURN node.{5}? as label, size");
sb.AppendLine("ORDER BY id(node)");
sb.AppendLine("LIMIT {3}");
string commandQuery = sb.ToString();
commandQuery = string.Format(commandQuery, index, luceneQuery, skip, limit, !string.IsNullOrEmpty(relationshipLabel) ? string.Format(":{0}", relationshipLabel) : string.Empty, labelPropertyName);
GraphClient graphClient = GetNeo4jGraphClient();
var cypher = new CypherFluentQueryCreator(graphClient, new CypherQueryCreator(commandQuery), new Uri(Configuration.GetDatabaseUri()));
var resulttask = cypher.ExecuteGetCypherResults<GraphNode>();
var graphNodeResults = resulttask.Result.ToList().Select(gn => (IGraphNode)gn).ToList();
return graphNodeResults;
}
在其他版本中,您需要创建一个包装器。目前最简单的路线是升级到2.0版本。如果这对您不可行,请告诉我,我将编写.NET C#包装器。
答案 1 :(得分:0)
当我为neo4j尝试了几个可用的.NET客户端时,我发现它们都缺少我的用例。看到这些客户端只是围绕REST API的包装器,直接通过REST与服务器通信要容易得多。在当前的.NET状态下,HTTP和JSON支持非常出色。
通过这种方式,您可以动态构建节点并随意创建它们(node creation via REST)。
答案 2 :(得分:0)
您可以使用Cypher.Net创建动态节点和关系 http://www.nuget.org/packages/CypherNet/
(文档和来源:https://github.com/mtranter/CypherNet)
const string NEO_SERVER_URL = "http://localhost:7474/db/data/";
var sessionFactory = Fluently.Configure(NEO_SERVER_URL ).CreateSessionFactory();
var cypherSession = sessionFactory.Create();
var node = cypherSession.CreateNode(new { FirstName = "John", LastName = "Smith"});
dynamic dynamicNode = node;
dynamicNode.SomeProperty = "SomeValue";
dynamicNode.AnotherProperty = 123;
cypherSession.Save(node);