【问题标题】:How do I create a relationship between two nodes using C# Neo4jClient?如何使用 C# Neo4jClient 在两个节点之间创建关系?
【发布时间】:2016-02-21 01:25:45
【问题描述】:

我是 Neo4j 场景的新手,但在尝试创建播放列表和歌曲之间的关系时,我收到以下 C# 错误:

An unhandled exception of type 'System.NullReferenceException' occurred in Neo4jClient.dll

Additional information: Object reference not set to an instance of an object.

C#代码:

client.Cypher
    .Match("(song1:Song)", "(playlist1:Playlist)")
    .Where((Song song1) => song1.Name == newSong.Name)
    .AndWhere((Playlist playlist1) => playlist1.Name == newPlaylist.Name)
    .Create("(playlist1)-[r:CONTAINS_SONG]->(song1)")
    .ExecuteWithoutResults();

对象newSongnewPlaylist 使用来自文件的数据作为种子,并且已经存在于Neo4j 数据库中。使用实时调试器时,我看到newSong.Name 等于“Goodbye In Her Eyes”,newPlaylist.Name 等于“Adam Country”。这些值都存在于 Neo4j 数据库中(如下)。使用 .Query.QueryText 也会产生相同的错误。我正在使用neo4j-community-3.0.0-M03Neo4jClient 1.1.0.28

我创建了自己的有效查询,但我觉得 C# 代码与正在输出的实际查询之间存在脱节。以下作品:

MATCH (song1:Song),(playlist1:Playlist)
WHERE song1.Name = 'Goodbye In Her Eyes' AND playlist1.Name = 'Adam Country'
CREATE (playlist1)-[r:CONTAINS_SONG]->(song1)

Neo4j 浏览器文本输出:

+==============================+
|n                             |
+==============================+
|FullName: Adam Country.txt    |
|Name: Adam Country            |
+------------------------------+
|Artist: Zac Brown Band        |
|FullName: Goodbye In Her Eyes |
|Name: Goodbye In Her Eyes     |
+------------------------------+

我的 C# 代码应该是什么样子才能完成这种关系?

[Playlist "Adam Country"] CONTAINS_SONG [Song "Goodbye In Her Eyes"]

【问题讨论】:

  • 你初始化客户端了吗?
  • 您的 C# 代码对我来说看起来不错,我已经直接使用它并通过 LinqPad 针对 2.3x3.0x 数据库实例运行它,在这两种情况下都没有问题。能否请您展示您的SongPlaylist 课程?

标签: c# graph neo4j neo4jclient nosql


【解决方案1】:

如果 newSong 和 newPlaylist 被初始化,最可能的解释是客户端没有被初始化。 是否创建 GraphClient 的实例,然后调用 Connect?

var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
client.Connect();

【讨论】:

  • 如果客户端未初始化,您将获得InvalidOperationException 而不是NullReferenceException
  • 如果客户端没有分配给一个新的GraphClient,你会得到一个NullReferenceException
  • 我明白你现在在说什么了——尽管NullReferenceException 是从Neo4jClient.dll 抛出的——GraphClient 必须被实例化才能知道。
  • 啊,好的,克里斯,是的,我同意你的看法。 Caesar - PlayList.Name 和 Song.Name 的类型是什么?如果它们可以为空,则在 Neo4j 中任何 Song 或 PlayList 的值为空时,可能会发生 NullReferenceException。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2011-02-03
相关资源
最近更新 更多