我对使用
之间的区别有疑问db.Cypher.Match("(u:User)").Where((TUser u) => u.Id == user.Id)
vs
db.Cypher.Match("(u:User)").Where("u.Id = {param}").WithParam("param", user.Id)
第一个是否存在任何安全风险(注入),但我询问了性能差异,因为看起来检查第一个在Web应用程序进程上执行的查询,但在第二个查询由Neo4j数据库实例执行。
答案 0 :(得分:2)
绝对没有区别。
在第一个示例中,我们会自动将其移动到您的参数:https://github.com/Readify/Neo4jClient/wiki/cypher#parameters
该参数将自动命名为p0
。
您可以通过查看QueryText
查看实际线路内容来查看此内容:https://github.com/Readify/Neo4jClient/wiki/cypher#debugging
您的任何一个示例都没有注入风险。在这两种情况下,都会安全地处理id。如果你进行了字符串连接,就会有注入风险,比如Where("u.Id = " + user.Id.ToString())
。
至于性能,在您致电.Results
之前,您正在编写的所有内容仍然会打包到查询中并在Neo4j上执行。 ==
比较从未在.NET中实际执行过:您只是使用C#来表达您的查询,然后我们将表达式树拆开并将其重新写入Cypher。