Pourquoi devons-nous écrire SET FMTONLY OFF dans les procédures stockées lorsque vous utilisez Entity Framework

J'ai récemment rejoint l'un des projets de mon équipe. Ils utilisent ASP.NET MVC et MS SQL avec Entity Framework comme ORM.

J'ai remarqué que chacune des procédures stockées utilisées dans l'EF a cette ligne commune au début de la définition de la procédure stockée

IF(0=1) SET FMTONLY OFF 

Je pensais que c'était une condition très étrange, alors j'ai fait un peu de google à ce sujet et j'ai aussi posé la question à mes collègues. Ils disent que lorsque EF mappe la procédure stockée, tous les parameters sont envoyés comme nuls et ignore toute la boucle if. Par conséquent, il ignorerait également la condition IF(0=1) et SET FMTONLY OFF alors SET FMTONLY OFF

En recherchant SET FMTONLY OFF MSDN, dit

Renvoie uniquement les métadonnées au client. Peut être utilisé pour tester le format de la réponse sans réellement lancer la requête.

Cela devient un problème quand vous ne contrôlez pas la database, vous devez continuer à dire aux DBA de l'append et leur expliquer encore et encore pourquoi est-ce nécessaire en premier lieu.

Je n'ai toujours pas une idée claire pourquoi cela est nécessaire. Si quelqu'un peut expliquer cela un peu en détail ou me guider vers un lien qui a couvert ce sujet signifierait le monde pour moi.

Je l'ai fait temporairement afin de pouvoir utiliser le concepteur pour mapper des fonctions pour représenter la procédure stockée dans le code. Le problème est que le concepteur passe null par défaut à la procédure pour déterminer le schéma. Cela peut parfois être un problème avec les procs stockés qui effectuent la validation et lancent des exceptions, etc., si null est passé. Le paramètre que vous décrivez contourne cela car il renvoie des méta et non datatables réelles.

Je crois que la raison est similaire à celle pour les procédures stockées qui fonctionnent à partir de SSRS. En résumé, lorsque FMTONLY est actif, votre procédure stockée peut avoir des résultats inattendus. D'où la raison de l'éteindre explicitement. Pour plus de détails, lisez Traiter avec le mal de FMTONLY de SSRS