Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

EF4 - La stored procedure selezionata non restituisce colonne

EF non supporta l'importazione di stored procedure che creano set di risultati da:

  • Query dinamiche
  • Tabelle temporanee

Il motivo è che per importare la procedura EF deve eseguirla . Tale operazione può essere pericolosa perché può innescare alcune modifiche nel database. Per questo motivo EF utilizza un comando SQL speciale prima di eseguire la procedura memorizzata:

SET FMTONLY ON

Eseguendo questo comando, la procedura memorizzata restituirà solo "metadati" sulle colonne nel suo set di risultati e non eseguirà la sua logica. Ma poiché la logica non è stata eseguita, non esiste una tabella temporanea (o una query dinamica creata), quindi i metadati non contengono nulla.

Hai due scelte (tranne quella che richiede la riscrittura della procedura memorizzata per non utilizzare queste funzionalità):

  • Definisci manualmente il tipo complesso restituito (penso che dovrebbe funzionare)
  • Usa un hack e solo per aggiungere la stored procedure mettila all'inizio SET FMTONLY OFF . Ciò consentirà l'esecuzione normale del resto del codice del tuo SP. Assicurati solo che il tuo SP non modifichi alcun dato perché queste modifiche verranno eseguite durante l'importazione! Dopo aver importato con successo, rimuovi quell'hack.