Stored procedure return -1 per tutti i casi in entity framework

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 

Ho creato questa Stored Procedure e tring per chiamare questa Stored Procedure usando l’entity framework. Di seguito è riportato il codice scritto in C #.

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

spIsValidUser Stored Procedure spIsValidUser restituisce -1 in tutti i casi. Per favore fatemi sapere errore

MODIFICA – In base alla risposta data, la procedura di archiviazione non viene utilizzata dichiarazione di reso perché Entity Framework non può supportare valori scalari di ritorno di stored procedure fuori dalla scatola. Fammi sapere come posso inviare dati scalari dalla Stored Procedure ?

La stored procedure attualmente restituisce un valore scalare . Utilizzare la seguente procedura per risolvere questo problema:

  • Modifica la procedura memorizzata in questo modo (Non utilizzare la parola chiave return nella stored procedure per restituire il valore, Entity Framework non può supportare i valori scalari di Stored Procedure Return fuori dalla scatola, MA c’è un problema):

     ALTER PROC spIsValidUser @UserName varchar(50), @Password varchar(50) AS SELECT Count(*) FROM Users where UserName= @UserName and Password= @Password return 
  • È necessario importare la stored procedure come una Function . Fare clic con il tasto destro del mouse sull’area di lavoro del modello Entity e selezionare Add -> Function Import .

  • Nella finestra di dialogo Add Function Import , inserire il nome al quale si desidera fare riferimento alla stored procedure nel modello, selezionare la procedura dall’elenco a discesa e scegliere il valore di ritorno della procedura da scalare .

  • Finalmente scrivi il tuo codice in questo modo:

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

Modifica: Penso che il supporto dei valori restituiti dalla stored procedure dipenda dalla versione del framework Entity. Anche Entity Framework non ha un ricco supporto per le stored procedure perché è un ORM, non una sostituzione SQL.

Avete importato correttamente le procedure memorizzate nel modello EF? e stai impostando il tipo corretto di ritorno alle stored procedure ??

Sono disponibili 4 tipi di reso che è ansible impostare sulle procedure. I possibili tipi di reso sono:

  1. nessuna
  2. scalari
  3. Complesso
  4. Entità

è necessario impostare il tipo di ritorno degli scalari.

se non sai come impostare il tipo di ritorno, allora ecco il tutorial completo http://www.binaryintellect.net/articles/30738a7c-5176-4333-aa83-98eab8548da5.aspx

esempio veloce.

 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; 

questo restituirà il conteggio degli ordini int.

Hai provato:

 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