我正在使用Neo4jClient
来编写演示。我的演示有两个节点: Beer 和 BeerBrand ,一个关系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>'
你能帮我解决这个问题吗?
答案 0 :(得分: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();
答案 1 :(得分:0)
这里有一个类似问题的答案:Neo4jClient - Retrieving relationship from Cypher query它将为您提供您应该遵循的指南。
本质上,您需要在关系中添加一个无参数构造函数,以允许客户端(特别是JSON.NET)能够将您的关系从数据库中的内容反序列化到您的代码。基本上--JSON.NET无法弄清楚如何构建你的关系,因为它不知道你的构造函数中的参数是什么。
您可能还需要从返回'Relationship'更改为'RelationshipInstance'。