c# - stored - Al usar un procedimiento almacenado en el marco de la entidad, ¿cómo puedo hacer que la entidad tenga sus propiedades de navegación llenas?
mapear stored procedure entity framework (2)
El marco de la entidad es extremadamente lento, así que intenté usar un procedimiento almacenado, pero me encontré con este problema.
Entity Framework le permite definir un procedimiento almacenado que produce una entidad. Sin embargo, mi entidad tiene ''propiedades de navegación'' que no se están rellenando al usar este método.
¿Hay algún trabajo alrededor?
Encontré esta pregunta de SO al investigar procedimientos almacenados (SP) con EF. También veo que personas como @KristianNissen y @Todilo han preguntado si hay alguna actualización con EF6.
La respuesta es sí, EF 6 ha cambiado las cosas, pero no agregó nada para ayudar a cargar las propiedades de navegación cuando se usan SP. Tampoco puede usar el método .Include () con SP como se hizo en esta pregunta SO .
La única forma es escribir su SP para cargar específicamente las propiedades de navegación. Sin embargo, ahora hay una buena documentación de Microsoft sobre el uso de SP: consulte Query SP y SP que devuelven varios conjuntos de resultados .
Para completar, el cambio que trajo EF versión 6 fue permitir que los procedimientos almacenados (SP) manejen la inserción, actualización y eliminación; consulte el artículo de Microsoft y Entity Framework Tutotial .
Los procedimientos bien almacenados no son compostables. Por lo tanto, no hay forma de llamar a su SPROC y hacer que el EF rellene automáticamente las relaciones en la misma consulta, utilizando Include () o algo así.
Digamos que tienes productos y categorías.
y usted tiene un sproc para obtener productos:
es decir
var products = context.GetProducts(someproductfilter);
Los productos resultantes no tendrán sus categorías cargadas.
Sin embargo, si tiene un segundo procedimiento almacenado que obtiene las Categorías para dichos productos:
es decir
var categories = context.GetCategoriesForProducts(someproductfilter);
una característica en EF llamada relación de reparación, que vincula las entidades relacionadas una vez que la segunda entidad ingresa al contexto, asegurará que después de que se realicen ambas llamadas, cada producto en los productos tendrá una Categoría no nula.
Esto no es ideal, porque está haciendo más de una consulta, pero funcionará.
Una alternativa es utilizar EFExtensions . El tipo que escribió eso creó la capacidad de escribir sprocs que cargan más datos de una sola vez.
Espero que esto ayude
Saludos alex