Neo4j 2.0 和更高版本的 Neo4jClient 将提供事务支持。此问题正在跟踪工作:https ://bitbucket.org/Readify/neo4jclient/issue/91/support-cypher-transactions-integrated
但是,这并没有给您带来独特性...
Neo4j 没有唯一索引可以自动执行这个想法。(我希望我们将来会在 Neo4j 2.0 标签中看到这一点,但现在还没有。)
您需要 a) 知道您正在创建的内容是独一无二的,或者 b) 首先检查。
你似乎走的是B路线。
事务允许您在单个事务操作中进行检查然后创建,但仍然可以通过网络进行多次调用。
您写出的 Cypher 文本实际上是首选:您在单个语句中进行检查并创建。我很想知道为什么你认为这是一个 hack。
您可以通过 Neo4jClient 执行此语句,例如:
var id = 123;
graphClient.Cypher
.Start(new { n = Node.ByIndexLookup("node_auto_index", "name", id)})
.With("count(*) as c")
.Where("c=0")
.Create("x={0}", new MyType { name = id })
.Return<Node<MyType>>("c")
一些With
andWhere
语句如果它们更干净的话会很好,但它现在可以使用。
还有 Cypher 的CREATE UNIQUE
条款也可能涵盖您的情况。