c# neo4j neo4jclient

c# - Uso de neo4j de propiedades de lista



neo4jclient (1)

Neo4jClient no es un ORM, y no sigue las relaciones automáticamente. Le brinda una buena manera de ejecutar consultas Cypher y deserializar los resultados en objetos .NET.

En el modelo de Neo4j, las propiedades pueden ser una primitiva ( boolean , byte , short , int , long , float , double , char o string ) o una matriz de una de estas primitivas. No pueden ser objetos completos.

Ahora, Neo4jClient no implementa mágicamente el modelo gráfico para ti. Necesita averiguar cómo asignar su modelo en el gráfico.

Acabo de empezar a aprender neo4j con c # client, y tengo problemas para entender el uso exacto de las propiedades de la lista.

En la aplicación de ejemplo Im que estoy usando (que se ejecuta en la parte superior del conjunto de datos "Cineasts Movies & Actors") hay un actor de clase con las siguientes propiedades:

public class Actor { public String id { get; set; } public String name { get; set; } public String birthplace { get; set; } public String birthday { get; set; } public String biography { get; set; } public List<Movie> filmography { get; set; } public Role playedIn(Movie movie, String role) { return null; } }

Y la clase Movie como

public class Movie { public String id { get; set; } public String title { get; set; } public int year { get; set; } public List<Role> cast { get; set; } }

Ahora, obtiene un Actor con el nombre == actorName de una base de datos como se muestra

string actorName = ".*" + actorName + ".*"; Dictionary<string, object> queryDict = new Dictionary<string, object>(); queryDict.Add("actorName", actorName); var query = new Neo4jClient.Cypher.CypherQuery("start n=node(*) where has(n.__type__) and n.__type__ =~ /".*Person/" and has(n.name) and n.name =~ {actorName} return n", queryDict, CypherResultMode.Set); List<Actor> actors = ((IRawGraphClient)client).ExecuteGetCypherResults<Actor>(query).ToList(); foreach (Actor a in actors) { MessageBox.Show(a.name); }

Ahora el actor a en un ejemplo anterior tiene sus propiedades "básicas" (nombre, fecha de nacimiento, identificación, ...) pero la filmography lista es nula, no puedo hacer lo siguiente

foreach (Actor a in actors) { foreach (Movie m in a.filmography) { MessageBox.Show(m.title); } }

¿Por qué poner esta propiedad de lista en la declaración de clase si no obtiene esta lista de nodos de Movie relacionados automáticamente cuando obtengo Actor, pero debo hacerlo desde una consulta separada?