0

所以我一直在使用 C# 的 Neo4jClient 库,我对这两个世界都很陌生。

我在这里有这个 POCO:

public class SetEntity
{
    public string GUID { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public string CreatedDate { get; set; }
}

这个对象类用于各种方法,特别是用于创建两个节点之间的关系,但是我必须明确说明使用哪个 POCO 来创建它IRelationshipAllowingSourceNode<SetEntity>IRelationshipAllowingTargetNode<EntityInstance>. 下面是处理该问题的整个类。

class GraphRelationshipEntityInstanceToSetEntity : Relationship, IRelationshipAllowingSourceNode<EntityInstance>, IRelationshipAllowingTargetNode<SetEntity>
    {
        string RelationshipName;

        public GraphRelationshipEntityInstanceToSetEntity(NodeReference targetNode)
            : base(targetNode)
        {

        }

        public GraphRelationshipEntityInstanceToSetEntity(string RelationshipName, NodeReference targetNode)
            : base(targetNode)
        {
            this.RelationshipName = RelationshipName;
        }

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

有没有办法可以将<SetEntity>任何其他对象传递到IRelationshipAllowingSourceNode<Object>. 我认为没有必要为每个与另一个节点类型有关系的节点类型创建这个类。

4

1 回答 1

2

我不熟悉 Neo4jclient,但可以评论 c# 中的泛型。

在 c# 中,您可以定义一个据说具有开放泛型类型的接口。也就是说,neo4jclient 可能声明了一个IRelationshipAllowingSourceNode<T>带有某个方法的接口,在该接口上可能使用了 T/returns T 的实例。

据说这是一个具有开放泛型类型的接口。

当您实现该接口时,您已经通过指定您正在使用的确切类型来关闭打开的泛型类型。但是,您可以使您的类使用两个开放的泛型类型,如下所示,然后在实例化 GraphRelationshipEntityInstanceToSetEntity 时关闭这些泛型类型。见下文。

class GraphRelationshipEntityInstanceToSetEntity<T, T1> : Relationship, IRelationshipAllowingSourceNode<T>, IRelationshipAllowingTargetNode<T1>
    {
        string RelationshipName;

        public GraphRelationshipEntityInstanceToSetEntity(NodeReference targetNode)
            : base(targetNode)
        {

        }

        public GraphRelationshipEntityInstanceToSetEntity(string RelationshipName, NodeReference targetNode)
            : base(targetNode)
        {
            this.RelationshipName = RelationshipName;
        }

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

有关泛型已回答的另一个问题,请参见此处:

泛型 - 开放和封闭构造类型

希望这会有所帮助。

蒂姆

于 2013-06-20T08:54:50.723 回答