Mik*_*nes 0 c# neo4j neo4jclient
这是一个两部分问题
我尝试创建一个新节点时收到此错误
无法将类型'Neo4jClient.NodeReference'隐式转换为'Neo4jClient.GraphClient'
我这里有3个类第一个连接到GraphDB服务器并返回客户端变量以供以后在其他类中使用
public GraphClient GetConnection()
{
var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
client.Connect();
return client;
}
Run Code Online (Sandbox Code Playgroud)
然后是New_Node类,看起来像这样
class New_Node
{
public GraphClient Node { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后是Graph Operations类,它具有CreateNode方法
public GraphClient CreateNode()
{
Graph_Connection connection = new Graph_Connection();
var NewNode = connection.GetConnection();
var Created_Node = NewNode.Create(new New_Node());
return Created_Node;
}
Run Code Online (Sandbox Code Playgroud)
如何在另一行代码上设置Node的属性而不是用节点创建它们,我想让我的应用程序更具动态性,这种方式似乎很难编码
var refA = client.Create(new Person(){Name ="Person A"});
在Java中,人们可以做到这一点
Node user1 = this.graphDb.createNode();
user1.setProperty("name", "Mike");
Run Code Online (Sandbox Code Playgroud)
问题是你试图在节点本身内保持数据库连接.
这是您对节点数据结构的定义:
class New_Node
{
public GraphClient Node { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这表示您希望在名为"Node"的节点上拥有一个属性,该属性保存与包含该节点的DB的连接.舌头扭曲了吗?我的是.
根据您的Java比较,我认为您希望您的节点实际上如下所示:
class New_Node
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这表示你想要一个带有Name属性的节点,它是一个字符串.
然后,您可以像这样创建它:
graphClient.Create(new New_Node { Name = "Mike" });
Run Code Online (Sandbox Code Playgroud)
关于你的子问题,"1.我如何在另一行代码上设置Node的属性,而不是用节点创建它们",当你调用graphClient.Create
我们将它持久化到数据库时.任何以后的属性更改都是对DB的更新以及更多调用.
只需在节点准备好持久化时调用create.
var node = new New_Node();
... think ...
node.Name = "Mike";
... think ...
graphClient.Create(node);
Run Code Online (Sandbox Code Playgroud)
基本上,每次打电话graphClient.Something
我们都会打到DB.这是因为我们正在讨论无状态API.这与在内存中与DB通信的Java驱动程序不同(假设您正在讨论嵌入式Neo4j实例).
HTH.
- 塔特姆