LINQ-to-SQL CompiledQuery.Compile()与Update,Delete,Insert?

时间:2008-12-09 21:08:42

标签: linq-to-sql precompiled

所有

所以我已经将LINQ-to-SQL中的所有选择查询转换为使用CompiledQueries来加快速度。目前为select语句工作得很好,但我无法弄清楚如何预编译插入,更新或删除语句。

当然,当您在LINQ-to-SQL中插入,删除或更新时,必须使用对象模型。但显然在它生成查询的过程中,预编译和存储在​​静态成员中会很好。

这可能吗?什么是LINQ性能,如更新,删除和插入时,它没有预编译?我可以看到它比选择快得多,因为他们在下面做的更简单,更少“动态”......

3 个答案:

答案 0 :(得分:8)

有很大的不同。 Linq-To-SQL选择查询可以是大型复杂表达式树。这些可能需要一段时间“编译”。在这种情况下,合并到一些可以针对SQL Server运行的T-SQL。因此,缓存操作的结果以便可以重复使用是有意义的。

然而,其他Delete,Update和Insert是简单的操作,不需要将表达式树转换为T-SQL(LINQ本身就是查询)。很遗憾我们已经接受过训练,可以将SQL代码视为“查询”来执行这些其他操作,我们并不是要求任何信息。

这些操作仅由DataContext定义,而不是由LINQ定义,因此已经编译了执行这些函数的代码。

答案 1 :(得分:3)

我认为只有三个插入才有意义才能编译和重用,因为删除很简单(DELETE FROM Table WHERE Key ...)而UPDATE只更新已更改的字段,因此每个更新操作。

[)amien

答案 2 :(得分:0)

L2S使用“sp_executeSQL”,因此在第一次运行它之后,它将存储在存储过程执行计划缓存中。后续运行(相同查询 - 不是相同的参数)将重用缓存中的编译计划。所以你要求的是由SQL Server“幕后”自动处理。