Sto utilizzando Entity Framework 4.1 e talvolta devo chiamare stored procedure. Alcuni di questi restituiscono valori come valori di ritorno. Per esempioCome dovrei restituire un int da una stored procedure in Entity Framework 4.1?
CREATE PROCEDURE ...
...
INSERT INTO ...
SELECT @@Identity
(Aggiornamento: valore di ritorno rimosso, non rilevante Stiamo restituendo l'identità.)
ho il seguente codice nella mia classe respository:
var orderNo = context.Database.SqlQuery<int>("EXEC myProc").Single();
Questo fallisce con il messaggio di errore The specified cast from a materialized 'System.Decimal' type to the 'System.Int32' type is not valid.
Se cambio il codice sopra a
var orderNo = context.Database.SqlQuery<decimal>("EXEC myProc").Single();
tutto funziona.
Ora, penso che dovrei essere in grado di restituire un int. Qual è il modo corretto per farlo?
Non restituire @@ Identity oppure è possibile che si verifichino comportamenti imprevisti poiché @@ Identity restituisce l'ultimo id indipendentemente dalla sessione. Usa 'SCOPE_IDENTITY()' invece – Icarus