¿Por qué no puedo ejecutar una función SQL usando .net Entity Framework?

He escrito el siguiente código en mi proyecto .net. Nunca antes había usado Entity Framework, y esto es lo primero que quiero hacer: ejecutar una función y guardar el resultado

using System.Data.Objects;

MyEntities entities = new MyEntities

var result0 = entities.CreateQuery<string>("SELECT XXX FROM Fn_Org_GetXXX('XXXX',2012);").first();

var result1 = entities.ExecuteFunction("fn_org_getXXX", new ObjectParameter[]
    {
        new ObjectParameter("location","XXXX"),
        new ObjectParameter("fiscalyear",2012)
    });

Ambas líneas de código lanzan una excepción que indica que la función no existe. Sin embargo, cuando ejecuto el código mencionado anteriormente en SQL Server Management Studio, funciona bien. Estoy iniciando sesión en el servidor SQL con las mismas credenciales.

El error de result0 dice:

'Fn_Org_GetXXX' no se puede resolver en un tipo o función válida.

El error de result1 dice:

No se pudo encontrar FunctionImport 'fn_org_getXXX' en el contenedor 'MyEntities'.

¿Qué estoy haciendo mal?

preguntado el 30 de enero de 12 a las 20:01

2 Respuestas

No creo que las funciones definidas por el usuario de SQL sean compatibles con Entity Framework en este momento. Aquí hay un post que puede definirlo en el esquema edmx.

Hay algunas actualizaciones de Junio ​​de 2011 CTP, pero no creo que se haya lanzado todavía.

Respondido el 31 de enero de 12 a las 00:01

Entonces, ¿qué pasa con mi primera línea de código que simplemente pasa en un comando sql como una línea de texto? ¿Alguna idea de por qué eso no funciona? `Var result0 = entity.CreateQuery ("SELECCIONAR XXX DE Fn_Org_GetXXX ('XXXX', 2012);"). First (); `- Río vivian

Las funciones necesitan el nombre del esquema en su convención de llamada. Entonces, si su función se crea en el esquema dbo, la llamaría como dbo.fn_org_getXXX

Respondido el 31 de enero de 12 a las 00:01

Cuando califico el nombre del esquema, obtengo esta excepción: The container 'dbo' specified for the FunctionImport could not be found in the current workspace. - Río vivian

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.