Estoy utilizando Entity Framework 4.1 y algunas veces necesito llamar a procedimientos almacenados. Algunos de estos regresan como valores de retorno. Por ejemplo¿Cómo debo devolver un int de un procedimiento almacenado en entity framework 4.1?
CREATE PROCEDURE ...
...
INSERT INTO ...
SELECT @@Identity
(actualización: valor de retorno eliminado, no es relevante Estamos volviendo a la identidad.)
tengo el siguiente código en mi clase de repositorio:
var orderNo = context.Database.SqlQuery<int>("EXEC myProc").Single();
Este falla con el mensaje de error The specified cast from a materialized 'System.Decimal' type to the 'System.Int32' type is not valid.
Si cambio el código anterior a
var orderNo = context.Database.SqlQuery<decimal>("EXEC myProc").Single();
todo funciona.
Ahora, creo que debería poder devolver un int. ¿Cuál es la forma correcta de hacer esto?
No devuelva @@ Identity o puede encontrarse con un comportamiento inesperado ya que @@ Identity devuelve la última identificación independientemente de la sesión. Use 'SCOPE_IDENTITY()' en su lugar – Icarus