¿Es posible cargar una entidad excluyendo algunas propiedades? Una de las propiedades de esta entidad es costosa de seleccionar. Me gustaría cargar esta propiedad. ¿Es eso posible?Entity Framework 4 propiedades de carga diferida selectiva
Respuesta
Ahora que ha leído la respuesta de todos, le daré la respuesta correcta. EF no es compatible con la carga diferida de las propiedades. Sin embargo, apoya un concepto mucho más poderoso que este. Se llama división de tabla donde puede asignar una tabla a dos entidades. Supongamos que una tabla de productos en la base de datos se puede asignar a la entidad del producto y a la entidad ProductDetail. A continuación, puede mover los campos costosos a la entidad ProductDetail y luego crear una asociación 1..1 entre prodcut y la entidad dedetexto de producto. A continuación, puede cargar la asociación de detalles del producto solo cuando lo necesite. En mi capítulo de rendimiento de mi libro, tengo una receta llamada. 13-9. Mover una propiedad costosa a otra entidad
Espero que ayude!
stimms es correcto, pero tenga cuidado al usar la carga diferida. Puede tener problemas de rendimiento y no darse cuenta de que la propiedad se está cargando en una ubicación específica en su código. Esto se debe a que carga los datos cuando usa la propiedad
Prefiero usar la carga explícita. De esta forma sabrá cuándo se cargan y dónde. Aquí hay un enlace que da un ejemplo para LoadProperty http://sankarsan.wordpress.com/2010/05/09/ado-net-entity-framework-data-loading-part-2/
También puede cargar con entusiasmo utilizando el método Include. Ejemplo aquí: http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework
stimms y Dan, no me refiero a una propiedad relacionada, me refiero a un campo (miembro de la clase) como Biografía (cadena en C# o varchar (1024) en SQL Server), que es realmente caro para cargar con la entidad, me gustaría cargarlo perezoso cuando sea necesario. Por lo que sé, esto no funciona en EF4. ¿Hay una manera de hacerlo? –
¿Quieres cargar una propiedad escalar? Justo fuera de mi cabeza, podría tratar de dividir Biografía en Entity y configurarlo como una propiedad de navegación. Entonces podría cargarlo perezoso/ansioso/expicito. Puede haber una manera mejor ... Voy a probar esta teoría cuando tenga la oportunidad. –
Gracias, parece ser la única manera eficiente. –
Con una propiedad escalar, la única manera de no cargar selectivamente una cierta propiedad es proyectar en ESQL o L2E:
var q = from p in Context.People
select new
{
Id = p.Id,
Name = p.Name // note no Biography
};
+1 a Dan; Hacer esto perezosamente es peor que cargarlo por adelantado. Si desea controlar la carga, sea explícito.
Gracias por esta sugerencia. Sí, pero esta proyección no es eficiente. En primer lugar, daría como resultado un tipo anónimo que no se puede usar como Personas directamente. Un nuevo objeto People debe crearse e instanciarse correctamente, lo que será una pérdida de tiempo al analizar los objetos. Este tipo tampoco será rastreado por el contexto. –
@Nazaf, estás optimizando prematuramente. –
- 1. Carga ansiosa selectiva en Entity Framework
- 2. Creando propiedades blob con Entity Framework 4?
- 3. Código de Entity Framework Primera carga diferida de las propiedades de no navegación
- 4. Inhabilitar la carga diferida de forma predeterminada en Entity Framework 4
- 5. Entity Framework 4 - Herencia
- 6. Entity Framework 4 Repository?
- 7. Ventajas y desventajas de Entity Framework 4 Code-First
- 8. Entity Framework 4 y WPF
- 9. Entity framework 4 o DataSet?
- 10. La carga diferida de Entity Framework no funciona desde otro hilo
- 11. C# Entity Framework 4 Propiedades de navegación que provocan un rendimiento lento en commit
- 12. Entity Framework 4: Selección de registro único
- 13. de Entity Framework 4.1 Propiedades virtuales
- 14. Entity Framework - carga ansiosa de entidades relacionadas
- 15. Entity Framework - navegar e incluyendo propiedades a través de colecciones
- 16. ¿Biblioteca de carga diferida?
- 17. Entity Framework 4, heredando vs extendiendo?
- 18. Entity Framework 4 Table Valued Función
- 19. Entity Framework 4 y valores predeterminados
- 20. Claves únicas en Entity Framework 4
- 21. Cómo manejar ObjectResult en Entity Framework 4
- 22. FunctionImport in entity framework 4 número
- 23. Alternativa SqlMetal para Entity Framework 4
- 24. Entity Framework 4 POCO con diccionario
- 25. Entity Framework 4 - AddObject vs Attach
- 26. Cuándo utilizar ApplyOriginalValues en Entity Framework 4?
- 27. Membresía Asp.Net - Proveedores en Entity Framework 4
- 28. Entity Framework 4 Visual Studio 2008
- 29. Entity Framework 4 Multiple Object Delete (RemoveAll)
- 30. Entity Framework 4 No guarde mis filas Many-To-Many
Gracias. Tendré que hacer esto. Pero EF4 debería soportar la carga diferida en propiedades escalares, puede ser realmente útil. –
Sé que el equipo está trabajando para admitir propiedades de carga diferida listas para usar en la próxima versión, pero creo que mover columnas costosas a otra entidad abre vías para retrasar la carga de varias propiedades caras a la vez. Imagine que tiene un objeto empleado con EmployeePicture y la descripción del empleado que son costosos y desea retrasar la carga de ambos, pero siempre que quiera cargarlos, desea cargarlos juntos. Esto es algo que no puedes hacer en linq a sql. – zeeshanhirani
Sí, si hay más de un campo costoso, en este caso el equipo EF puede habilitar un indicador como LoadAllLazyProperties que permite a EF cargar todas las propiedades escalares marcadas como Lazy Load together, cada vez que se solicite. ¡Esto mejora situaciones como la que mencionaste sin separar EntityTypes! –