0

我在 C# 中试验 Neo4jClient 并陷入以下错误:

'Neo4jClient.IGraphClient.CreateRelationship(Neo4jClient.NodeReference, GraphDB.PrecedesRelationshipo)' 的最佳重载方法匹配有一些无效参数。

此错误适用于具有以下代码的行:

client.CreateRelationship<Process,PrecedesRelationship>(prevProcess, new PrecedesRelationship(currProcess, new PrecedesData(product, isOptional)));

这里,prevProcess 和 currProcess 都是 Neo4jClient.NodeReference 类型。实际上,我生成节点并将它们的 NodeReference 值存储在字典中,以便我可以轻松查找它们。节点创建得很好。

以下是我的课程:

public class Process
{
    public string Name { get; set; }
}

,

public class PrecedesData
{
    public string Name { get; set; }
    public bool IsOptional { get; set; }

    public PrecedesData()
    { }

    public PrecedesData(string name)
    {
        this.Name = name;
        this.IsOptional = false;
    }

    public PrecedesData(string name, bool isOptional)
    {
        this.Name = name;
        this.IsOptional = IsOptional;
    }
}

public class PrecedesRelationship : Relationship<PrecedesData>, IRelationshipAllowingSourceNode<Process>,
IRelationshipAllowingTargetNode<Process>
{
    public static readonly string TypeKey = "PRECEDES";

    public PrecedesRelationship(NodeReference targetNode, PrecedesData data)
        : base(targetNode, data)
    { }

    public override string RelationshipTypeKey
    {
        get { return TypeKey; }
    }
}

当我在 CreateRelationship 中省略类型时,我得到编译器无法推断类型的错误。

我查看了 Neo4jClient Wiki 上的示例,我认为我做对了,但我似乎弄错了。

我在这里想念什么?

4

1 回答 1

0

您应该使用 Cypher,因为 REST API 越来越遗留。真的,任何非 Cypher 的东西都在成为遗产。

client.Cypher
    .Start(new { prevProcess, currProcess })
    .CreateUnique("prevProcess-[:PRECEDES {precedes}]->currProcess")
    .WithParams(new { precedes = new PrecedesData(product, isOptional) })
    .ExecuteWithoutResults();

然后,您也不需要任何关系类。

此外,如果您删除多余的构造函数,您可以将整个代码示例缩短为:

public class PrecedesData
{
    public string Name { get; set; }
    public bool IsOptional { get; set; }
}

client.Cypher
    .Start(new { prevProcess, currProcess })
    .CreateUnique("prevProcess-[:PRECEDES {precedes}]->currProcess")
    .WithParams(new { precedes = new PrecedesData { Name = product, IsOptional = isOptional } })
    .ExecuteWithoutResults();
于 2013-10-25T22:53:58.350 回答