Neo4jClient - “.Where((TUser u) => u.Id == user.Id)”与“.Where("u.Id = {param}").WithParam("param", user.Id)"
Neo4jClient - difference between " .Where((TUser u) => u.Id == user.Id) " vs " .Where("u.Id = {param}").WithParam("param", user.Id) "
我对使用
之间的区别有疑问
db.Cypher.Match("(u:User)").Where((TUser u) => u.Id == user.Id)
对比
db.Cypher.Match("(u:User)").Where("u.Id = {param}").WithParam("param", user.Id)
第一个是否存在任何安全风险(注入),但我询问了性能差异,因为似乎第一个检查查询在 Web 应用程序进程上执行,但第二个检查查询由 Neo4j 数据库执行实例.
完全没有区别
在第一个例子中,我们自动为您将其移动到一个参数中: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。
我对使用
之间的区别有疑问db.Cypher.Match("(u:User)").Where((TUser u) => u.Id == user.Id)
对比
db.Cypher.Match("(u:User)").Where("u.Id = {param}").WithParam("param", user.Id)
第一个是否存在任何安全风险(注入),但我询问了性能差异,因为似乎第一个检查查询在 Web 应用程序进程上执行,但第二个检查查询由 Neo4j 数据库执行实例.
完全没有区别
在第一个例子中,我们自动为您将其移动到一个参数中: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。