c# - ultimos - Neo4j.NET Client Ejecuta las consultas de cadena de caracteres
split c# (2)
Oficialmente documentado en https://github.com/Readify/Neo4jClient/wiki/cypher#manual-queries-highly-discouraged
Sin embargo, esto será malo para el rendimiento y arriesgado para la seguridad.
Es malo para el rendimiento, porque tendrá que volver a analizar cada consulta. Debe usar parámetros, como en el ejemplo en https://github.com/Readify/Neo4jClient/wiki/cypher-examples#create-a-user. De esta forma, el texto de la consulta permanece constante, y solo el parámetro varía, por lo que no incurrir en el costo de compilación de consultas en cada llamada.
Es arriesgado para la seguridad, porque puede obtener la codificación erróneamente y exponerse a riesgos de inyección.
Por lo tanto, no realice consultas manuales a menos que realmente comprenda lo que está haciendo. Están ocultos a propósito.
¿Es posible ejecutar consultas CYPHER como simples cadenas antiguas usando el Cliente Neo4j .NET o cualquier otro módulo?
Por ejemplo, si quiero agregar algunos nodos a mi base de datos de gráficos y ya tuve ensamblados los enunciados, ¿hay algún medio para ejecutar una cadena?
CREATE (n:Edit {name:"L-1154LX"});
Estoy buscando procesar por lotes una lista de consultas CREATE CYPHER que ya se han creado.
Estoy escribiendo una aplicación .NET que permite la extracción de nodos y relaciones de hojas de cálculo de Excel para que puedan generarse dinámicamente y cargarse en neo4j (ver el modelo de objeto de traducción / gestión a continuación).
Cuando los cargue en neo4j a través del neo4jclient no sabré cómo se ven mis nodos en tiempo de ejecución; pueden tener cualquier cantidad de atributos y estos pueden tener cualquier nombre y valor. En los ejemplos en https://github.com/Readify/Neo4jClient/wiki/cypher-examples , parece que debería tener clases locales para referirme a los nombres y valores de los atributos; pero esto no funcionará ¿Me estoy perdiendo un truco aquí? consultas parametrizadas? (incluso estos ejemplos esperaban una clase codificada localmente).
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;
}
}