2012-01-10 21 views
5

que utiliza este código para definir mi procedimiento almacenadoUso procedimiento almacenado en Entity Framework (código primero)

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 

y este es mi código 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(); 
} 

problema está aquí:

Quiero enviar los datos de la tabla Orders y el procedimiento almacenado me lo genera. ¿Cómo puedo obtener los datos Orders en mi código C#? Recuerde que quiero ejecutar este procedimiento almacenado solo una vez.

Respuesta

7

Eche un vistazo a Does Entity Framework Code First support stored procedures? y http://blogs.msdn.com/b/wriju/archive/2011/05/14/code-first-4-1-using-stored-procedure-to-insert-data.aspx que hablan sobre la ejecución de un proceso almacenado a través de un objeto DbContext.

Creo que tal vez su problema es que no recibirá las órdenes como parte de su consulta? ¿es esto correcto? Si es así, esto se debe a que solo está seleccionando clientes. Necesita crear un objeto del mismo esquema que espera que sea devuelto por su consulta (es decir, que tenga propiedades de cliente y orden) o seleccionar en un tipo dinámico (eww).

Dicho esto os recomiendo hacer esto en LINQ lugar:

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

Este es un enfoque mucho mejor, ya que está utilizando EF por lo que su diseñado ni consulta por algo que no encaja en su modelo

+0

tnkx para usted buena y completa respuesta.pero ahora, ¿cómo puedo seleccionar el tipo dinámico con linq de mi procedimiento de Tienda. –

+0

im no es 100% seguro, pero algo así como var customers = context.Database.SqlQuery ("SP @Country", categoryParam) .ToList(); probablemente sea más o menos el correcto –

+0

tnkx voy a probar tu solución –

Cuestiones relacionadas