我刚开始用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
节点的这个列表,但是我必须从单独的查询中做到这一点?
答案 0 :(得分:1)
Neo4jClient不是ORM,它不会自动跟踪您的关系。它为您提供了一种执行Cypher查询并将结果反序列化为.NET对象的好方法。
在Neo4j的模型中,属性可以是原始属性(boolean
,byte
,short
,int
,long
,float
,{ {1}},double
或char
),或其中一个原语的数组。它们不可能是整个物体。
现在,Neo4jClient并没有为你神奇地实现图模型。您需要弄清楚如何将模型映射到图表上。