Las propiedades de carga diferida selectiva de Entity Framework 4

¿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?

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!

Julie Lerman tiene un artículo sobre cómo dividir una mesa

Con una propiedad escalar, la única forma de no cargar selectivamente una propiedad determinada 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.

los estímulos son correctos, pero tenga cuidado al usar cargas perezosas. 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 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

Dada una consulta sobre un EntityFramework DbSet, donde la entidad objective contiene BigProperty y SmallProperty, cuando intenta acceder solo a SmallProperty sin cargar BigProperty en la memoria:

 //this query loads the entire entity returned by FirstOrDefault() in memory //the execution is deferred during Where; the execution happens at FirstOrDefault db.BigEntities.Where(filter).FirstOrDefault()?.SmallProperty; //this query only loads the SmallProperty in memory //the execution is still deferred during Select; the execution happens at FirstOrDefault //a subset of properties can be selected from the entity, and only those will be loaded in memory db.BigEntities.Where(filter).Select(e=>e.SmallProperty).FirstOrDefault(); 

Por lo tanto, podría aprovechar este comportamiento para consultar solo BigProperty donde realmente lo necesita y usar select statements para filtrarlo explícitamente en cualquier otro lugar.

Probé esto con la funcionalidad de uso de memoria de las herramientas de diagnóstico de depuración de Visual Studio.