neo4j使用list属性

时间:2014-01-23 21:08:58

标签: c# neo4j neo4jclient

我刚开始用c#客户端学习neo4j,而我无法理解列表属性的确切用法。

在我使用的示例应用程序中(运行在“Cineasts Movies& Actors”数据集之上),有一个具有以下属性的类Actor:

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;
    }
}

类电影为

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

现在,它从数据库中获取名为== actorName的Actor,如图所示

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);

}

现在上面示例中的Actor a确实有“基本”属性(name,birthday,id,..)但列表filmography为null,我无法执行以下操作< / p>

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

    }

}

为什么我将这个List属性放在类声明中,如果我在获取Actor时没有自动获取相关Movie节点的这个列表,但是我必须从单独的查询中做到这一点?

1 个答案:

答案 0 :(得分:1)

Neo4jClient不是ORM,它不会自动跟踪您的关系。它为您提供了一种执行Cypher查询并将结果反序列化为.NET对象的好方法。

在Neo4j的模型中,属性可以是原始属性(booleanbyteshortintlongfloat,{ {1}},doublechar),或其中一个原语的数组。它们不可能是整个物体。

现在,Neo4jClient并没有为你神奇地实现图模型。您需要弄清楚如何将模型映射到图表上。