Neo4jClient - 查询关系

时间:2013-05-08 05:04:28

标签: neo4jclient

尝试在这样的查询中查看关系:

var query = _graph.Cypher.Start(
new
{
    me = Node.ByIndexLookup("node_auto_index", "id", p.id)
}).Match("me-[r:FRIENDS_WITH]-friend")
.Where((Person friend) => friend.id == f.id)
.Return<FriendsWith>("r");

这是FriendsWith类。我无法为FriendsWith添加无参数构造函数,因为基类(Relationship)没有无参数构造函数。

public class FriendsWith : Relationship,
        IRelationshipAllowingSourceNode<Person>,
        IRelationshipAllowingTargetNode<Person>
    {
        public FriendsWith(NodeReference<Person> targetNode)
            : base(targetNode)
        {
            __created = DateTime.Now.ToString("o");
        }
        public const string TypeKey = "FRIENDS_WITH";
        public string __created { get; set; }
        public override string RelationshipTypeKey
        {
            get { return TypeKey; }
        }

    }

但我收到错误“没有为此对象定义无参数构造函数。”当我试图运行它。返回查询关系的正确方法是什么?

堆栈跟踪

在Neo4jClient.Deserializer.CypherJsonDeserializer 1.Deserialize(String content) in c:\TeamCity\buildAgent\work\f1c4cf3efbf1b05e\Neo4jClient\Deserializer\CypherJsonDeserializer.cs:line 53 at Neo4jClient.GraphClient.<>c__DisplayClass1d 1.b__1c(任务1 responseTask) in c:\TeamCity\buildAgent\work\f1c4cf3efbf1b05e\Neo4jClient\GraphClient.cs:line 793 at System.Threading.Tasks.ContinuationResultTaskFromResultTask 2.InnerInvoke()    在System.Threading.Tasks.Task.Execute()

1 个答案:

答案 0 :(得分:0)

只需将其反序列化为代表数据结构的POCO:

public class FriendsWith
{
    public string __created { get; set; }
}

var query = _graph.Cypher
    .Start(new {
        me = Node.ByIndexLookup("node_auto_index", "id", p.id)
    })
    .Match("me-[r:FRIENDS_WITH]-friend")
    .Where((Person friend) => friend.id == f.id)
    .Return(r => r.As<FriendsWith>())
    .Results;

实际上你根本不需要FriendsWith : Relationship, IRelationshipAllowingSourceNode<Person>, IRelationshipAllowingTargetNode<Person>课程。

使用Cypher创建关系:

_graph.Cypher
    .Start(new {
        me = Node.ByIndexLookup("node_auto_index", "id", p.id),
        friend = Node.ByIndexLookup("node_auto_index", "id", p.id + 1)
    })
    .CreateUnique("me-[:FRIENDS_WITH {data}]->friend")
    .WithParams(new { data = new FriendsWith { __created = DateTime.Now.ToString("o") } })
    .ExecuteWithoutResults();

你会在Neo4jClient wiki上看到更多的例子。基本上,在这个时代,一切都应该是Cypher。