Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

158
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda