2015-03-12 11 views
11

Sto tentando di restituire un elenco di int da una stored procedure in Entity Framework.Elenco di restituzione di Entity Framework dalla stored procedure

Ho creato la procedura memorizzata e l'ho aggiunta a Entity Framework. Sto cercando di associarlo a un tipo complesso di ma quando apro la funzione import.

Genera automaticamente un tipo complesso che restituisce solo un int invece di un set di risultati.

Qualcuno sa come posso importare un'entità che restituisce un elenco come un set di risultati?

+2

ci mostrano un po 'di codice è già in modo che possiamo aiutare. – DavidG

+0

Questo non è realmente correlato al codice. Posso aggiungere una classe vuota con una lista di interi, ma questa è una GUI correlata, non sto usando il codice prima, quindi dovrebbe essere tutto attraverso la GUI. –

+0

Ho una procedura memorizzata che fondamentalmente seleziona solo un elenco di ID che voglio afferrare in C# –

risposta

11

Ho creato questa stored procedure di esempio che restituisce un elenco di valori int:

CREATE PROCEDURE dbo.GetListOfInt 
AS BEGIN 
    SELECT * 
    FROM 
    (VALUES (42), (4711), (8088), (80286), (80486), (655235)) AS VT(VC) 
END 

Ho poi ha aggiunto questa stored procedure al mio modello EF .edmx e ho creato questa funzione Importazione:

enter image description here

Interrogare la stored procedure mi dimostra che restituisce un set di risultati che consiste di int valori - pertanto definire il valore di ritorno per essere una raccolta di scalare: Int32 nella finestra di dialogo funzione di importazione.

Dopo di che, posso chiamare che stored procedure e recuperare i risultati come questo:

using (testEntities ctx = new testEntities()) 
{ 
    ObjectResult<int?> result = ctx.GetListOfInt(); 

    foreach (int intValue in result.AsEnumerable()) 
    { 
     Console.WriteLine("INT value returned: {0}", intValue); 
    } 
} 
+1

Se sei ancora in giro ti capita perché, restituisce inizialmente un valore nullo risultati impostati, quando nel passaggio due è possibile vedere che nullable è false –

+1

@Space: Mi stavo chiedendo anch'io - non sono sicuro, mi dispiace.Immagino che EF non possa essere * sicuro * che almeno una riga sia restituita - la procedura memorizzata (se fosse un po 'più realistica) potrebbe anche non restituire nulla (se non ci sono righe corrispondenti nella tabella per 'WHERE' criteri forniti) –

+0

Questo ha senso, ancora grazie per la tua esperienza –

13

Se si sta solo cercando di ottenere un elenco da una stored procedure, non è necessario mappare nulla di speciale.

Basta chiamare in questo modo:

var results = dbContext.Database.SqlQuery<int>("SP_YourSP").ToList(); 

questo dovrebbe restituire una lista di interi

+1

Lo proverò –

+1

Questo ha funzionato per me. È un'eccezione alla mappatura degli oggetti, ma porta a termine il lavoro senza ulteriore mal di testa – 1c1cle

+0

@AntoinePelletier Cosa c'entra MVC e WebForm con quale tecnologia stai usando per accedere al tuo database? –

Problemi correlati