我最近加入了我的团队中的一个项目。他们使用ASP.NET MVC和MS SQL以及实体框架作为ORM。为什么我们必须在存储过程中使用实体框架编写SET FMTONLY OFF
我注意到,每一个在EF使用的存储过程具有存储过程definitation
IF(0=1) SET FMTONLY OFF
我认为这是一个很奇怪的状态开始这个公共线,所以我用Google搜索一下了一下并且问我的同事。他们说,当EF映射存储过程时,它将所有参数作为null发送,并跳过所有if循环。因此,它也将跳过IF(0=1)
条件,然后SET FMTONLY OFF
上搜索SET FMTONLY OFF
MSDN会说
只返回元数据到客户端。可以用于测试 响应的格式而不实际运行查询。
当你不控制数据库时,它会成为一个问题,你必须不断地告诉DBA添加它并一遍又一遍地向他们解释为什么首先需要它。
我仍然没有清楚的想法为什么这是必需的。如果有人能够详细解释一下这个问题,或者引导我进入一些涵盖了这个主题的链接,那么这对我来说就意味着这个世界。
Microsoft已更新其页面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)所取代。 – Mike