【发布时间】:2020-01-24 13:40:00
【问题描述】:
我最近加入了我团队中的一个项目。他们使用 ASP.NET MVC 和 MS SQL 以及 Entity Framework 作为 ORM。
我注意到 EF 中使用的每个存储过程在存储过程定义的开头都有这个公共行
IF(0=1) SET FMTONLY OFF
我认为这是一个非常奇怪的情况,所以我在 Google 上搜索了一下,并询问了我的同事。他们说,当 EF 映射存储过程时,它会将所有参数都发送为 null 并跳过所有 if 循环。因此它也会跳过IF(0=1) 条件,然后将SET FMTONLY OFF
在搜索SET FMTONLY OFFMSDN 时,说
仅将元数据返回给客户端。可以用来测试格式 没有实际运行查询的响应。
当您不控制数据库时,就会出现问题,您必须不断告诉 DBA 添加它,并一遍又一遍地向他们解释为什么首先需要它。
我仍然不清楚为什么需要这样做。如果有人可以详细解释一下,或者引导我找到涵盖该主题的链接,对我来说意味着世界。
【问题讨论】:
-
微软已经更新了他们的 SET FMTONLY 页面:- 不要使用这个功能。此功能已被 sp_describe_first_result_set (Transact-SQL)、sp_describe_undeclared_parameters (Transact-SQL)、sys.dm_exec_describe_first_result_set (Transact-SQL) 和 sys.dm_exec_describe_first_result_set_for_object (Transact-SQL) 取代。
标签: sql-server entity-framework