2011-06-08 13 views
8

Ho due stored procedure semplici in SqlServer:Esecuzione di stored procedure da un DbContext

  • SetData(@id int, @data varchar(10))
  • GetData(@id int).

GetData restituisce attualmente un set di risultati a riga singola, a colonna singola, ma potrei cambiarlo per essere una funzione corretta se necessario.

Quale sarebbe il modo migliore per eseguirli da un'istanza DbContext?

Se possibile, mi piacerebbe evitare di dover gestire da solo la gestione dello stato e/o esporre tipi specifici di EF. Ho iniziato recuperando ObjectContext e osservando le funzioni Execute*, ma la documentazione è piuttosto scadente e mancano esempi che coinvolgono stored procedure.

Idealmente, mi piacerebbe essere in grado di fare questo:

myContext.ExecuteNonQuery("SetData", id, data); 
var data = myContext.ExecuteScalar<string>("GetData", id); 

risposta

21

DbContext offre queste funzioni. Usa:

IEumerable<...> result = myContext.Database.SqlQuery<...>(...) 

per eseguire il recupero stored procedure e

int result = myContext.Database.ExecuteSqlCommand(...) 

per eseguire la modifica dei dati stored procedure.

+0

E i parametri? Devo farlo come specificato qui o c'è una scorciatoia? http://stackoverflow.com/questions/4873607/how-to-use-dbcontext-database-sqlquerytelementsql-params-with-stored-procedu/4874600#4874600 –

+0

Questo è un modo. Dovrebbe funzionare anche senza usare 'SqlParameter' - basta passare i valori. Non sono sicuro che non sia necessario farvi riferimento da @ p0, @ p1, ecc. Quando si utilizzano direttamente i valori. –

+0

Ho finito per passare un oggetto anonimo e convertirlo internamente in SqlParameters. –

Problemi correlati