Saltar al contenido

Obtener datos del procedimiento almacenado con Entity Framework

Revisamos de forma exhaustivamente cada reseña de nuestra web con la meta de mostrarte siempre la información con la mayor veracidad y actualizada.

Solución:

Use los siguientes pasos para resolver este problema:

  1. Debe importar el procedimiento almacenado como una función. Haga clic con el botón derecho en el área del espacio de trabajo de su modelo de Entidad y elija Add -> Function Import.
  2. En el cuadro de diálogo Agregar función de importación, ingrese el nombre al que desea que se haga referencia a su procedimiento almacenado en su modelo, por ejemplo Search_Productselija su procedimiento de la lista desplegable y elija el valor de retorno del procedimiento a ser Entities y elige Products de la lista desplegable.
  3. Luego en el código detrás:

    var db = new MyEntities();
    var TEST_SEARCH_TERM = "product";
    var result = db.Search_Products(TEST_SEARCH_TERM);//Search_Products is the name that you specified in Function Import dialog
    
    MyGridView.DataSource = result;
    MyGridView.DataBind();
    

La razón por la que obtienes -1 porque el resultado es que Entity Framework no puede admitir valores de retorno de procedimiento almacenado listos para usar. Creo que la compatibilidad con los valores de retorno de los procedimientos almacenados depende de la versión de Entity Framework. Además, Entity Framework no tiene soporte para procedimientos almacenados enriquecidos porque es un ORM, no un reemplazo de SQL.

Me he encontrado con esto antes con procedimientos almacenados usando SQL dinámico. He tenido éxito usando tipos complejos si agrego la línea ‘SET FMTONLY OFF;’ (consulte https://msdn.microsoft.com/en-us/library/ms173839.aspx) en la parte superior de mi procedimiento almacenado antes de agregarlo al modelo EF. Una vez que haya configurado su modelo con su tipo complejo, asegúrese de eliminar esta línea.

Ejemplo:

ALTER PROCEDURE dbo.SearchProducts
  @SearchTerm VARCHAR(max)
AS
BEGIN
  SET FMTONLY OFF;
  DECLARE @query VARCHAR(max)
  SET @query = 'SELECT * FROM dbo.Products WHERE Name LIKE ''%' + @SearchTerm + '%'''
  EXEC(@query)
END

Reseñas y calificaciones

Tienes la posibilidad dar recomendación a este escrito si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *