Tengo un procedimiento almacenado que devuelve un valor, no un conjunto de datos, y tengo problemas para hacerlo funcionar con EF4.Llamar al procedimiento almacenado con los parámetros
que he visto esto: http://dotnet.dzone.com/news/how-retrieve-stored-procedure
Esto es lo que hice: He añadido un procedimiento para el modelo, y se importa una función.
El primer problema que tuve fue el hecho de que los parámetros en mi procedimiento se llaman como @_Parameter_in
. Eso hizo que EF los traiga como p_Parameter_in
porque no funcionaría con un carácter de subrayado como primer carácter. Luego, cuando llamé al procedimiento almacenado, puedo ver en la llamada del Analizador de SQL que busca @p_Parameter_in
y, por supuesto, hubo un problema con eso.
Ahora renombré los parámetros y busqué en SQL Trace: todo se ve y funciona muy bien. El problema es que no puedo sacar el valor. Aquí es cómo se ve mi código:
System.Data.Objects.ObjectParameter newKey = new System.Data.Objects.ObjectParameter("NewKey_out", typeof(Int32));
newKey.Value = 0;
context.GetNextSurrogateKey_v2("tTest", newKey);
Después de llamar newKey.Value
, siempre es 0 o cualquier valor que establece que lo haga. No devuelve el valor. Sospecho que mi problema es con la forma en que importo la función. Yo uso Scalars y el tipo de datos Int32
. "Crear nuevo tipo complejo" está deshabilitado para mí por algún motivo. ¿Alguien tuvo ese problema?
Eso es algo que observar, solo puedo modificar el procedimiento para que funcione de esta manera. Actualmente no devuelvo valor escalar. Asigno valor al parámetro OUTPUT en el procedimiento almacenado. – katit
Eso tampoco funciona. Recibo el error "El lector de datos devuelto por el proveedor de datos de la tienda no tiene suficientes columnas para la consulta solicitada" – katit
Ok, lo hice funcionar. Al colocar, seleccione @MyValue al final del proceso almacenado. La pregunta sigue abierta si es posible usar los parámetros OUTPUT con EF ... – katit