2008-12-16 12 views
6

He creado una función de importación que devuelve los resultados de un procedimiento almacenado como una de mis entidades. sin embargo, parece que no puedo atravesar mis propiedades de navegación para acceder a los datos en otras entidades. Sé que puede usar include() para objectQueries pero no puede encontrar nada que obligue al EF a cargar mis relaciones para los resultados de entidad de las importaciones de funciones.Importación de función de marco de entidad, no se pueden cargar relaciones para funciones que devuelven tipos de entidad

¿Alguna idea?

Gracias de antemano.

+0

un duplicado de http://stackoverflow.com/questions/1035677/using-a-stored-procedure-in-entity-framework-how-do-i-get-the-the-entity-to-have – user48545

Respuesta

5

Esto no es posible en EF 1.0

La razón es que EF tendrá en cuenta los valores de procedimientos almacenados para ser sólo valores y no properites de navegación.

Por ejemplo, la entidad Empleado tiene varias entidades de Orden. En Order tiene una propiedad llamada EmployeeID. Cuando la base de datos llena su consulta utilizando declaraciones include, crea 1 consulta de proyección en SQL para completar todos los datos de pedido que un empleado en particular podría tener.

Así que si he dicho

var = context.Employees.Include empleado ("Ordenes") Donde (e => e.ID == 1) .First (.);

var orders = employee.Orders;

El SQL para la primera consulta va a crear una consulta de proyección que contendrá órdenes donde el EmployeeID = 1.

Ahora, cuando el procedimiento almacenado se ejecuta, esto puede hacer cualquier código detrás de las escenas (en otras palabras, puede volver cualquier conjunto de datos). Entonces, cuando SQL ejecuta el procedimiento almacenado, solo ejecuta el código en ese procedimiento almacenado y no tiene conocimiento de que EmployeeID en Order es un FK de esa propiedad. Además, si su procedimiento almacenado devuelve una entidad Empleado, entonces está viendo otro escenario en el que ni siquiera tendrá un ID de pedido para seguir.

Para solucionar esto, puede configurar su consulta en EF usando instrucciones Include que pueden reflejar cualquier procedimiento almacenado. Si usa la combinación adecuada de sentencias .Select e .Include, debería poder hacer lo mismo.

Cuestiones relacionadas