【发布时间】:2016-11-24 21:09:56
【问题描述】:
当我使用实体框架执行存储过程时,它会生成以下语法:
exec sp_executesql N'EXEC test @CityIds',N'@CityIds nvarchar(1)',@CityIds=N'1'
我们的 DBA 对此类查询提出了担忧,并希望摆脱 sp_executesql。
查询应为:
exec test @CityIds=1
实体框架中有哪些不同的方法来实现这一点?
【问题讨论】:
-
什么 DBA 表达了担忧?这是一个完全安全的参数化查询 - 有什么可抱怨的?我不知道有什么方法可以告诉 EF 改变这种行为.....
-
我同意你的观点。但是 DBA 期望 sp_executesql 将该查询创建为动态查询,而这无助于缓存执行计划。是否有任何解决方法可以在没有动态查询的情况下创建它?
-
这是不是动态查询!它只是一个简单的、正确参数化的标准 T-SQL 查询,它会被执行,并带有它的参数值。 没有,据我所知,在 EF 中没有什么可以“关闭”这种行为 - 毕竟执行 参数化查询是 普遍接受的最佳实践 针对 SQL Server
-
有道理,感谢您的解释。只是想知道执行计划缓存点。对此有何意见?
-
好吧,因为它是一个经过适当参数化的查询,它在计划缓存中的表现会非常好,并且可以在后续请求中重复使用——即使参数 values 改变 ....
标签: entity-framework