Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

159
Vistas
Procedimiento almacenado devuelve -1 para todos los casos en el marco de la entidad
CREATE PROC spIsValidUser @UserName varchar(50), @Password varchar(50) AS IF Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password) BEGIN return 0 END ELSE BEGIN return 1 END GO

Creé este Stored Procedure y trato de llamar a este Stored Procedure utilizando el marco de la entidad. A continuación se muestra el código escrito en C#.

 MyBusEntities db = new MyBusEntities(); int empQuery = db.spIsValidUser("abc", "abc@123");

Stored Procedure spIsValidUser devuelve -1 en todos los casos. Por favor, hágamelo saber error.

EDITAR : de acuerdo con la respuesta dada, el procedimiento de almacenamiento no se usa declaración de devolución porque Entity Framework no puede admitir valores escalares de retorno de procedimiento almacenado de forma inmediata. Déjame saber cómo puedo enviar datos escalares desde el Stored Procedure .

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Su procedimiento almacenado actualmente devuelve un valor escalar . Use los siguientes pasos para resolver este problema:

  • Cambie su procedimiento almacenado de esta manera (no use la palabra clave return en el procedimiento almacenado para devolver el valor, Entity Framework no puede admitir valores escalares de retorno de procedimiento almacenado listos para usar. PERO hay una solución):

     ALTER PROC spIsValidUser @UserName varchar(50), @Password varchar(50) AS SELECT Count(*) FROM Users where UserName= @UserName and Password= @Password return
  • Debe importar el procedimiento almacenado como una Function . Haga clic con el botón derecho en el área del espacio de trabajo de su modelo de Entidad y elija Add -> Function Import .

  • En el cuadro de diálogo Add Function Import , ingrese el nombre al que desea que se haga referencia a su procedimiento almacenado en su modelo, elija su procedimiento de la lista desplegable y elija el valor de retorno del procedimiento para que sea escalar .

  • Finalmente escribe tu código así:

     MyBusEntities db = new MyBusEntities(); System.Nullable<int> empQuery = db.spIsValidUser("abc", "abc@123").SingleOrDefault().Value; MessageBox.Show(empQuery.ToString());// show 1 if Exist and 0 if not Exist

Editar: creo que el soporte de los valores de retorno del procedimiento almacenado 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.

over 4 years ago · Santiago Trujillo Denunciar

0

Has probado:

 CREATE PROC spIsValidUser @UserName varchar(50), @Password varchar(50) AS IF Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password) BEGIN SELECT 0 END ELSE BEGIN SELECT 1 END GO
over 4 years ago · Santiago Trujillo Denunciar

0

¿Ha importado sus procedimientos almacenados en el modelo EF correctamente? ¿Y está configurando el tipo de retorno correcto para los procedimientos almacenados?

Hay 4 tipos de devolución posibles que puede configurar para sus procedimientos. Los tipos de devolución posibles son:

  1. ninguna
  2. escalares
  3. Complejo
  4. Entidades

necesita establecer el tipo de retorno de los escalares.

si no sabe cómo configurar el tipo de retorno, aquí está el tutorial completo http://www.binaryintellect.net/articles/30738a7c-5176-4333-aa83-98eab8548da5.aspx

rápido ejemplo.

 CREATE PROCEDURE CustOrderCount @CustomerID nchar(5) AS BEGIN SELECT COUNT(*) FROM ORDERS WHERE CUSTOMERID=@CustomerID; END NorthwindEntities db = new NorthwindEntities(); var count = db.CustOrderCount("ALFKI"); int ordercount = count.SingleOrDefault().Value;

esto devolverá el recuento de pedidos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda