2012-01-10 1 views
5

Io uso questo codice per definire la mia stored procedureUtilizzare stored procedure in Entity Framework (codice prima)

CREATE PROCEDURE [dbo].[SP] 
(@Country NVARCHAR(20)) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT c.*,O.* from Customers 
      as c inner join orders O on c.CustomerID=o.CustomerID 

    where [email protected] 
END 

e questo è il mio codice C#:

IList<Entities.Customer> Customers; 

using (var context = new NorthwindContext()) 
{ 
    SqlParameter categoryParam = new SqlParameter("@Country", "London"); 
    Customers = context.Database.SqlQuery<Entities.Customer>("SP @Country", categoryParam).ToList(); 
} 

Il problema è qui:

Desidero inviare un messaggio ai dati dalla tabella Orders e la procedura memorizzata me la trasmette. Come posso ottenere i dati Orders nel mio codice C#? Ricorda che voglio eseguire questa stored procedure solo una volta.

risposta

7

Dai uno sguardo a Does Entity Framework Code First support stored procedures? e http://blogs.msdn.com/b/wriju/archive/2011/05/14/code-first-4-1-using-stored-procedure-to-insert-data.aspx che parlano dell'esecuzione di un processo memorizzato tramite un oggetto DbContext.

Penso che il tuo problema sia che non stai ricevendo gli ordini come parte della tua richiesta? è corretto? Se è così, perché stai solo selezionando i clienti. È necessario creare un oggetto dello stesso schema che si prevede venga restituito dalla query (ovvero che abbia le proprietà sia del cliente che dell'ordine) o selezionare un tipo dinamico (eww).

Detto questo consiglio vivamente di fare questo in LINQ invece:

from c in context.Customers.Include(c=>c.Orders) 
where c.Country == country 
select c; 

questo è un approccio molto meglio come si sta utilizzando EF per quello che la sua progettata per e non l'esecuzione di query per qualcosa che non misura il vostro modello

+0

tnkx per te bella e completa answer.but ora, come posso selezionare il tipo dinamico con linq dalla mia procedura di negozio. –

+0

im non sicuro al 100% ma qualcosa come var customers = context.Database.SqlQuery ("SP @Country", categoryParam) .ToList(); probabilmente sarà di circa –

+0

tnkx proverò la tua soluzione –