11

Utilizo Entity Framework 4.1 Code First. Quiero llamar a un procedimiento almacenado que tiene un parámetro de salida y recuperar el valor de ese parámetro de salida además del conjunto de resultados fuertemente tipado. Es una función de búsqueda con una firma como estaEF4.1 Primero, el código: Procedimiento almacenado con el parámetro de salida

public IEnumerable<MyType> Search(int maxRows, out int totalRows, string searchTerm) { ... } 

me encontré con un montón de consejos para "Las importaciones de función", pero que no es compatible con el código de Primera. Puedo llamar a procedimientos almacenados utilizando Database.SqlQuery (...) pero eso no funciona con los parámetros de salida.

¿Puedo resolver ese problema usando EF4.1 Code First en absoluto?

Respuesta

26

SqlQuery funciona con los parámetros de salida, pero debe definir correctamente la consulta SQL y la configuración SqlParameter s. Pruebe algo como:

var outParam = new SqlParameter(); 
outParam.ParameterName = "TotalRows"; 
outParam.SqlDbType = SqlDbType.Int; 
outParam.ParameterDirection = ParameterDirection.Output; 

var data = dbContext.Database.SqlQuery<MyType>("sp_search @SearchTerm, @MaxRows, @TotalRows OUT", 
       new SqlParameter("SearchTerm", searchTerm), 
       new SqlParameter("MaxRows", maxRows), 
       outParam); 
var result = data.ToList(); 
totalRows = (int)outParam.Value; 
+0

¡Perfecto! Las piezas faltantes fueron "ParameterDirection.Output" y "OUT" después de "@totalRows" en la lista de parámetros de consulta. ¡Gracias! –

+0

Esto no parece funcionar cuando tiene múltiples parámetros de SALIDA. El valor para cada uno es nulo. ¿Alguna suerte al hacer esto con múltiples parámetros de SALIDA? –

+0

mi SP no devuelve nada ... entonces, ¿qué debería hacerse en ese caso ... SqlQuery no funciona ... alguna sugerencia? –

Cuestiones relacionadas