2011-11-30 21 views

risposta

6

Prima domanda: per quale versione del Entity Framework ?? .NET 3.5? .NET 4 ?? Le cose sono cambiate in modo significativo (e migliorato!) In .NET 4.

E in secondo luogo: cosa vuoi fare:

  • recuperare righe dal database

  • eseguire una stored procedure, senza valore di ritorno

  • mappa INSERIRE/AGGIORNA/ELIMINA le operazioni su un'entità su un proc memorizzato ??

Questi sono tre scenari piuttosto diversi - quindi abbiamo bisogno di sapere che cosa stai andando.

anche: basta cercare con Google (o Bing) - ci sono sacco di post sul blog e tutorial là fuori che vi mostra come farlo - un rapido elenco:

e letteralmente migliaia di più ......

Aggiornamento: ok, quindi si desidera recuperare i dati dal database. In tal caso, i tuoi passi sono:

  • andare al modello EF (* file .edmx) nella finestra di progettazione
  • destro del mouse e selezionare Update Model from Database
  • ritirare la stored procedure che si desidera utilizzare e andare attraverso la procedura guidata

enter image description here

Questo crea una voce per la stored procedure nel fisico modello di archiviazione. Successivo:

  • andare al Model Browser (? Vedere il menu contesto di cui sopra E 'appena sotto Update Model from Database), passare al modello di archiviazione e trovare la vostra procedura
  • pulsante destro del mouse su quel procedimento

enter image description here

  • Selezionare Add Function Import che importa la "funzione" (stored procedure) dal modello di archiviazione fisica nel concetto modello ual (la classe di contesto dell'entità, in pratica).

enter image description here

Qui, si hanno quattro scelte:

  • tuo stored procedure potrebbe non restituire nulla (come nel mio esempio) - allora è solo un metodo sulla classe di contesto che si può chiama che fa qualcosa
  • il tuo stored proc potrebbe restituire una raccolta di scalari, ad esempio un elenco di valori INT o qualcosa del genere - scegliere il valore appropriato nella discesa
  • tuo proc memorizzato potrebbe restituire entità dal modello, ad esempio, completi Customer entità - in questo caso, selezionare l'ultima opzione e scegliere il soggetto che si desidera mappare (il vostro proc memorizzato deve restituire tutte le colonne per tale entità, in questo caso)

O:

  • tuo proc memorizzato restituisce qualcosa - ma né solo gli scalari (non solo INT), né un soggetto - in questo caso, si può scegliere la terza opzione e definire un nuovo tipo complesso (una classe) che conterrà i risultati restituiti da la stored procedure.

Qualunque sia lo fai - fondamentalmente EF creerà un metodo sulla tua classe contesto oggetto che si può chiamare. Tutti i parametri richiesti dal proc memorizzato saranno i parametri di tale metodo in modo che tu possa facilmente passare, ad es. stringhe, interi ecc

+0

Sto usando .NET 4. La mia stored procedure restituisce valori dalla tabella di dati su cui sto interrogando. Ma voglio passare i parametri alla mia stored procedure dal mio programma. –

+0

@SatishNissankala: ampiamente aggiornato la mia risposta - utile? –

+0

Grazie a marc_s. È davvero utile –

2

Un altro scenario è che hanno bisogno di chiamare una stored procedure con più parametri di output. Di seguito è riportato un esempio completo.

public void MyStoredProc(int inputValue, out decimal outputValue1, out decimal outputValue2) 
{ 
    var parameters = new[] { 
     new SqlParameter("@0", inputValue), 
     new SqlParameter("@1", SqlDbType.Decimal) { Direction = ParameterDirection.Output }, 
     new SqlParameter("@2", SqlDbType.Decimal) { Direction = ParameterDirection.Output } 
    }; 

    context.ExecuteStoreCommand("exec MyStoredProc @[email protected], @[email protected] output, @[email protected] output", parameters); 

    outputValue1 = (decimal)parameters[1].Value; 
    outputValue2 = (decimal)parameters[2].Value; 
} 

Si prega di notare i tipi utilizzati (decimale). Se è necessario un altro tipo, ricordarsi di cambiare non solo nella lista metodo di argomento, ma anche il SqlDbType.XXX.

Problemi correlati