所以我一直在使用Neo4jClient库来处理C#,我对这两个世界都很陌生。
我在这里有这个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>
。我认为没有必要为每个与另一个节点类型有关系的节点类型创建这个类。
答案 0 :(得分:2)
我不熟悉Neo4jclient,但可以在c#中评论泛型。
在c#中,您可以定义一个接口,据说该接口具有开放的泛型类型。也就是说,neo4jclient可能会声明一个接口IRelationshipAllowingSourceNode<T>
,其中有一些方法可能使用T /返回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; }
}
}
请在此处查看有关泛型的其他问题:
Generics -Open and closed constructed Types
希望这会有所帮助。
添