如何使用C#中的neo4jclient通过字典定义的属性在neo4j中创建节点

时间:2015-02-25 00:21:18

标签: neo4j neo4jclient

作为一个完整的新手程序员,我试图用来自异构数据源的数据填充我的neo4j数据库。为此,我尝试使用Neo4jClient C#API。我的数据的异构性来自定制的,不断发展的DSL / DSML /元模型,它定义了可能的元素类型,即模型,因此为每种类型创建类并不理想。

据我了解,我的选择如下:

  1. 为每种类型的元素都有一个预定义的类:这样我就可以轻松地序列化我的对象,即如果所有属性都是基本类型或数组/列表。
  2. 有一个基类(带有一个包含属性的Dictionary),我用它作为我正在尝试序列化的模型和neo4j之间的接口。我在Can Neo4j store a dictionary in a node?看到了一个例子,但我不明白如何使用转换器(在答案中定义)来添加节点。另外,我没有看到基于int的字典如何允许我存储Key-Value对,其中键(即字符串)将转换为neo4j中的Property name。
  3. 动态生成自定义查询,如https://github.com/Readify/Neo4jClient/wiki/cypher#manual-queries-highly-discouraged所示。不建议这样做,可能不具备效果。
  4. 最终,我想要实现的是避免为我拥有的每种类型的元素定义一个单独的类,但仍然能够添加由我的元模型中的类型定义的属性。

    我也有兴趣以某种方式影响序列化程序忽略不兼容的属性(类似于XmlIgnore),因此我不需要为每个具有多个原始类型的类创建一个单独的类。

    谢谢, Ĵ

1 个答案:

答案 0 :(得分:0)

您尝试解决的问题有两个 - 第一个是如何编写C#部分,第二个是如何将解决方案存储到第一个问题。

在某些时候,您需要在C#代码中访问此数据 - 除非您完全dynamic,否则您需要拥有某种类结构。

选择3个选项:

  1. 请看一下这个问题:我认为neo4jclient heterogenous data return涵盖了这种情况。

  2. 在该答案中,转换器为您完成工作,您可以像以前一样createdelete等,转换器在这种情况下只处理IDictionary实例。答案中的IDictionary<int, string>示例,您可以使用任何您想要的内容,如果您愿意,可以使用IDictionary<string, string>,事实上 - 在该示例中,您所有&#39 ; d需要做的是将IntString属性更改为IDictionary<string,string>,它应该可以正常工作。

  3. 即使您沿着使用自定义查询的路线(您真的不需要),您仍然需要将对象作为类返回。没有什么变化,只会让你的生活更加艰难。

  4. XmlIgnore而言 - 你试过JsonIgnore吗? 或者 - 查看自定义转换器并将不兼容的属性添加到数据库中。