2012-02-03 18 views
8

En EF 4, ¿puedo hacer una carga ansiosa de las propiedades de navegación escribiendo sql en DbContext.Database.SqlQuery o DbContext.Set<T>().SqlQuery? Parece que no estoy llenando mis propiedades de navegación.Carga ansiosa en EntityFramework con DbContext.Database.SqlQuery

Editar

Parece que puedo hacer eagerloading con DbContext.Set(). SQLQuery, simplemente no DbContext.Database.SqlQuery. ¿Alguna idea de por qué?

+0

DbContext.Set() SQLQuery no hace la carga ansiosa; hace una carga floja. Puede ver esto si saca el sql ejecutado y recorre el código, usando: db.Database.Log = message => {Debug.WriteLine (message); }; –

Respuesta

4

DbSet.SqlQuery funciona de forma diferente que Database.SqlQuery. El método en DbSet se aplica al conjunto de entidades dado. Tiene que devolver entidades del tipo dado y, de forma predeterminada, se realizará el seguimiento de las entidades devueltas. Database.SqlQuery puede devolver cualquier objeto (posiblemente no una entidad) y los objetos devueltos nunca son rastreados por el contexto. También es posible que desee echar un vistazo a MSDN para comparar ambos métodos:.

Database.SqlQuery - http://msdn.microsoft.com/en-us/library/gg679117(v=vs.103).aspx

DbSet.SqlQuery - http://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=VS.103).aspx

+0

Gracias por responder. Ya sé sobre la parte de rastreo. Me pregunto por qué mis propiedades de navegación no se llenarán. Cuando me uno a las tablas con relaciones 1-M (sql en bruto), espero que mis propiedades de navegación sean ansiadas. Lo hace con DbContext.Set () .SqlQuery, pero por alguna razón, no lo hace con DbContext.Database.SqlQuery. – enamrik

+0

¿Puedes mostrar el código donde se muestran las propiedades de navegación? Ambos métodos finalmente llaman a ObjectContext.ExecuteStoreQuery y no creo que llene las propiedades de navegación (al menos no lo hizo cuando lo intenté). – Pawel

+0

Mira esto https://gist.github.com/0xorial/6363788 – ironic

Cuestiones relacionadas