2011-04-24 9 views
6

Ok, estoy a punto de romper mi teclado con un martillo sobre esto. Decidí jugar con EF este fin de semana y comencé un proyecto en 4.0. Descubrí que 4.1 está fuera, así que descargué e instalé el paquete.Entity Framework 4.1, no se puede encontrar el método Load()?

Imagine mi sorpresa cuando uso el método Load() en dbExtensions y no puede encontrarlo. Así que añadir una referencia a la binaria ADO.NET Entity Framework que el instalador crea, quite la referencia System.Data.Entity del proyecto, reconstruir, y dice

"El tipo 'System.Data.Objects.ObjectContext' se define en una asamblea que no se hace referencia. Usted debe agregar una referencia al ensamblaje 'System.Data.Entity, versión = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' ".

Traté de regenerar mi modelo, traté de eliminar cosas, intenté directamente hacer referencia a la 4.1 a través de los usos. Nada funciona.

Obviamente me falta algo básico. ¿Cómo demonios le digo a Visual Studio que use el framework 4.1?

Respuesta

4

Entity Framework 4.1 no es una versión separada. Todavía necesita Entity Framework 4.0 y su conjunto para que no pueda eliminar System.Data.Entity.dll de sus referencias. Además, EFv4.1 se trata principalmente de la nueva API DbContext, por lo que, a menos que vaya desde objetos Entity a POCOs y DbContext, no obtendrá ninguna ventaja al hacer referencia a EntityFramework.dll (salvo que escriba fuertemente Include en IQueryable).

0

La publicación de Ladislav es precisa. Para agregar un poco más de detalle, this ADO.Net team blog post explica cómo reemplazar correctamente la generación de código en un proyecto EF 4.0 con EF 4.1.

Sin embargo, tengo un problema similar después de actualizar a 4.1 y usar DbContext (incluidas algunas otras características). Tampoco tengo el método .Load(). Creo que estabas en el mismo lugar en el que estoy antes de has comenzado (innecesariamente) jugando con referencias.

Revise el enlace de arriba, hágame saber si ayuda, y si encuentra una solución para la función faltante .Load(), asegúrese de informarnos.

1

Tengo el mismo problema, y ​​todavía no sé la causa raíz.

Finalmente Consumo solución alternativa:

var query = from d ... 
query.Load(); 

o

(DbSet)context.myentity).Load(); 

Inténtelo.

+0

Y lo que es una diferencia con sólo llamar 'query.ToList()'? –

+0

"se ejecuta una consulta cuando: * Se enumeró por un foreach (C#) o para cada declaración (Visual Basic) * Se enumeró por una operación de recolección, como ToArray, ToDictionary o ToList .. * Los operadores de LINQ como First o Any se especifican en la parte más externa de la consulta. * Se llama al método de extensión de carga en un DbSet. " http://msdn.microsoft.com/en-us/library/gg696167%28v=VS.103%29.aspx – user829248

+1

@LadislavMrnka La diferencia entre 'Load' y' ToList' es que no se crea ninguna lista con 'Load' . _Esto equivale a llamar a ToList sin crear realmente la lista._ [link] (http://msdn.microsoft.com/en-us/library/system.data.entity.dbextensions.load (v = VS. 103) .aspx) –

27

he conseguido encontrar la .load falta de función() añadiendo lo siguiente:

using System.Data.Entity; 
+3

Esta es la respuesta. La carga es un método de extensión dentro de System.Data.Entity. –

+0

esto debería marcarse como respuesta, funcionó para mí –

+0

Wow. Fue muy humano para mí descubrir que esto era un problema de "uso". Pero fue. Muchas gracias. Gran respuesta. – Ravi

2

agregar una referencia a System.Data.Entity.dll, sea por:

GAC (.pestaña neto de diálogo Agregar referencia)

o

C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Entity.dll

Cuestiones relacionadas