如何使用 .Net 客户端动态创建节点及其属性?像这样的东西?
Node node = new Node();
node.AddProperty("Type", "Domain");
我不想在一个类中硬编码这个,即
JsonProperty***("Bar")]***
public string Foo { get; set; }
var myNodeReference = client.Create(new MyNode { Foo = "bar" });
在可在 Neo4j.org 下载页面下载的 Neo4j 服务器 v2.0 M06 版本中,您可以在 Cypher 查询中直接使用 JSON 到您的 Neo4j 服务器。
例子:
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# 包装器。
您可以使用 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);
当我为 neo4j 尝试了几个可用的 .NET 客户端时,我发现它们都不适合我的用例。由于这些客户端只是REST API的包装器,因此直接通过 REST 与服务器通信要容易得多。HTTP 和 JSON 支持在 .NET 的当前状态下非常出色。
这样你就可以动态地构建你的节点并以你喜欢的方式创建它们(通过 REST 创建节点)。