是否可以使用Neo4j .NET客户端或任何其他模块将CYPHER查询作为纯字符串执行?
例如,如果我想向我的图形数据库添加一些节点并已经组装好了语句,是否有一种执行字符串的方法:
CREATE (n:Edit {name:"L-1154LX"});
我想批量处理一系列已经创建的CREATE CYPHER查询。
是否可以使用Neo4j .NET客户端或任何其他模块将CYPHER查询作为纯字符串执行?
例如,如果我想向我的图形数据库添加一些节点并已经组装好了语句,是否有一种执行字符串的方法:
CREATE (n:Edit {name:"L-1154LX"});
我想批量处理一系列已经创建的CREATE CYPHER查询。
官方文档位于https://github.com/Readify/Neo4jClient/wiki/cypher#manual-queries-highly-discouraged
然而,这样做会影响性能,并且存在安全风险。
影响性能是因为需要重新解析每个查询。您应该使用参数,例如在https://github.com/Readify/Neo4jClient/wiki/cypher-examples#create-a-user的示例中。这样,查询文本保持一致,只有参数不同,因此您不必在每次调用时承担查询编译成本。
存在安全风险,因为很容易出现编码错误,从而暴露自己的注入风险。
所以,请不要运行手动查询,除非您真正了解自己在做什么。它们是有意隐藏的。
public class Node
{
public string NodeType = "";
public List<Attribute> Attributes;
public List<Relationship> ParentRelationships;
public List<Relationship> ChildRelationships;
public Node(string nodeType)
{
NodeType = nodeType;
Attributes = new List<Attribute>();
ParentRelationships = new List<Relationship>();
ChildRelationships = new List<Relationship>();
}
public void AddAttribute(Attribute attribute)
{
//We are not allowing empty attributes
if(attribute.GetValue() != "")
this.Attributes.Add(attribute);
}
public string GetIdentifier()
{
foreach (Attribute a in Attributes)
{
if (a.IsIdentifier)
return a.GetValue();
}
return null;
}
public void AddParentRelationship(Relationship pr)
{
ParentRelationships.Add(pr);
}
public void AddChildRelationship(Relationship cr)
{
ChildRelationships.Add(cr);
}
public class Attribute
{
private string Name;
private string Value;
public bool IsIdentifier;
public Attribute(string name, string value, bool isIdentifier)
{
SetName(name);
SetValue(value);
IsIdentifier = isIdentifier;
}
public void SetName(string name)
{
Name = name.Trim();
}
public void SetValue(string value)
{
Value = value.Trim();
}
public string GetName()
{
return Name;
}
public string GetValue()
{
return Value;
}
}