2010-09-23 16 views
8

acabo de tener una masiva *blonde moment**, pero que ha destacado una molestia que tengo con Entity Framework. Tengo la carga diferida discapacitados, así que estoy forzándome a pensar realmente acerca de lo que los datos que requiero con el fin de mantener la aplicación lo más rápido posible.Entity Framework - navegar e incluyendo propiedades a través de colecciones

Así que con el fin de devolver los datos dentro de una consulta, tengo que hacer uso del método Include:

var query = from item in context.Customers 
       .Include(x=> x.Orders) 
      select item 

Esto está bien hasta que yo quiero para seleccionar un elemento un poco más en la jerarquía. Es decir:

Customer 1-* Orders *-1 Factory 1-1 Factory Type 

Por lo que yo sé, la única manera de devolver todos estos datos ansiosamente sería hacer lo siguiente:

var query = from item in context.Customers 
       .Include("Orders.Factory.FactoryType") 
      select item 

Con lo anterior no soy capaz de haga uso de System.Data.Entity Lambdas según mi primer ejemplo. ¿Alguien sabe si me falta algo obvio aquí, o estoy atrapado con el uso de declaraciones de cadenas para mis propiedades de navegación a través de colecciones?

Si yo no tenía ningún colecciones, sólo podría escribir:

.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother 

Pero debido a la colección Orders, no hay manera de dar un paso a través de una propiedad secundaria por lo que yo puedo decir (FirstOrDefault , SingleOrDefault, etc., no funcionan).


** es sólo una vez-de-frase, da la casualidad que muy aficionado a las rubias *

Respuesta

14

Para incluyendo EntityCollections utiliza el Seleccionar método:

var query = from item in context.Customers 
      .Include(c => c.Orders.Select(o => o.Factory.FactoryType)) 
      select item 

Tenga en cuenta que esto no es una sobrecarga de la norma ObjectQuery<T>.Include Method y no es más que un método de extensión en ObjectQuery<T> Clase viene con EF CTP4.

Cuestiones relacionadas