2010-12-28 19 views
74

He visto muchos artículos sobre cómo superar este asunto, todos relacionados con CTP4, o agregando mis propios métodos de extensión.Usando Include en Entity Framework 4 con expresiones lambda

¿Existe una forma EF4 incluida "oficial" para usar las expresiones lambda dentro include (para las relaciones de primer nivel y también para el segundo y más nivel) o eventualmente no se incluyó en el RTM?

Se hay una - que estaría contento de saber cómo hacerlo, como el uso de la expresión lambda en mi código ahora (con # system.data.entity System.Data.Linq #) todavía me da:

no puede convertir la expresión lambda al tipo 'cadena' porque no es un tipo de delegado en:

var customers = from c in 
context.Customers.Include(c=>c.Phone) 
+1

no, no existe (aparte de CTP4 - como dices). Utilizo métodos de extensión/enumeraciones para lograr el tipo de seguridad. – RPM1984

+0

¿Lo hice también, entonces MS lo incluyó en CTP4 y lo eliminó en RTM? – Dani

Respuesta

188

La versión RTM de Entity Framework 4.1 en realidad incluye métodos de extensión en el archivo EntityFramework.dll, para la carga ansiosa con lambda a través de la función Include. Basta con incluir el archivo DLL en su proyecto y debe ser capaz de escribir un código como:

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList(); 

recuerde agregar una importación/Uso declaración para incluir el System.Data.Entity espacio de nombres. De lo contrario, el compilador no puede encontrar los métodos de extensión. E.g:

using System.Data.Entity; 

Consulte este artículo ADO.NET team blog para obtener más información.

+1

Si bien el enlace al blog de ADO.net sigue siendo relevante, la referencia/guía de EF6 para el mismo tema es: [Cargando entidades relacionadas] (https://msdn.microsoft.com/es-us/data/jj574232) Creo que la documentación debe cambiar a los ejemplos de Princesa y Unicornio en lugar del blog y publicación que han estado usando en todas partes. – Arkaine55

+0

gracias, acabo de agregar usando System.Data.Entity; me funciona. – adnan

4

no hay ningún soporte oficial para Incluir con la expresión lambda en RTM en el momento. Estoy usando this.

Cuando hablamos de CTP4, queremos decir Entity Framework Feature. Es una API más nueva que EF4. Incluye principalmente Code First y algunas otras mejoras.

+0

¿Alguna idea de cuándo admitirá MS esta característica? Entiendo que todos estos métodos de extensión tienen un problema de rendimiento con objetos grandes/multinivel, ya que necesitan atravesar una y otra vez cada llamada para incluir, y mientras el árbol de definición de objetos es constante y puede almacenarse en caché, no hay solución como esto todavía – Dani

+0

La característica de Entity Framework se encuentra actualmente en CTP5. Supongo que la versión de RTM debería publicarse en el primer trimestre de 2011. Así que espero que contenga Incluir con expresión lambda pero aún no he verificado su implementación, así que no puedo decir si usa algún tipo de almacenamiento en caché. –

+30

Esta respuesta es incorrecta a partir de EF 4.3.x. Las otras respuestas son correctas, uno debe tener ** usando System.Data.Entity ** para obtener la sobrecarga con expresiones lamda. –

75

Aunque esto está implícito en la pregunta, por cualquier otra persona que tiene el mismo problema en el que no se pueden utilizar con lambdas .include, asegúrese de tener lo siguiente:

using System.Data.Entity; 
+0

¡Gracias Aaron por esta declaración de uso! Eso es exactamente lo que necesitaba. – PHenry

+0

¡No lo creo! Tan simple, gracias Aaron. – Hoody

Cuestiones relacionadas