0

Neo4jClient用来写一个演示。我的演示有两个节点:BeerBeerBrand以及一个关系 Is_Made 具有属性 ReleaseDay。我编写了这段代码来获取制作特定啤酒的节点BeerBrand 。

var isMadeBy = beer
                .StartCypher("b")
                .Match("b-[r:IS_MADE]->e")
                .Return<Node<BeerBrand>>("e")                
                .Results.ToList();

现在,我想建立关系 *Is_Made*

var isMadeBy = beer
                .StartCypher("b")
                .Match("b-[r:IS_MADE]->e")
                 .Return<Relationship<IsMade>>("r")
                .Results.ToList();

但是,错误被抛出

class IsMade must be non-abstract type with a public parameterless constructor 
in order to use it as parameters 'TData' in the generic type or 
method 'Neo4jClient.Relationship<TData>'

你能帮我解决这个问题吗?

4

2 回答 2

0

这里有一个类似问题的答案:Neo4jClient - Retrieving relationship from Cypher query这将为您提供您应该遵循的指南。

本质上,您需要向您的关系添加一个无参数构造函数,以允许客户端(尤其是 JSON.NET)能够将您的关系从数据库中的内容反序列化到您的代码。基本上 - JSON.NET 无法弄清楚如何构建您的关系,因为它不知道构造函数中的参数与什么相关。

您可能还需要从返回“Relationship”更改为“RelationshipInstance”。

于 2013-07-22T09:35:36.090 回答
0

你看过维基吗?http://hg.readify.net/neo4jclient/wiki/cypher

如果您不需要关系 ID,请尝试一下:

var isMadeBy = beer
     .StartCypher("b")
     .Match("b-[r:IS_MADE]->e")
     .Return((r, e) => new {
          isMadeRelationship = r.As<Node<SomeObjectWithAPublicConstructor>>()
          beerBrand = e.As<Node<BeerBrand>>()
      })
      .Results.ToList();
于 2013-05-27T02:24:19.680 回答