2012-02-03 18 views
8

In EF 4, è possibile eseguire il caricamento delle proprietà di navigazione con piacere scrivendo sql su DbContext.Database.SqlQuery o DbContext.Set<T>().SqlQuery? Non sembra che le mie proprietà di navigazione vengano popolate.Eager caricamento in EntityFramework con DbContext.Database.SqlQuery

Modifica

Sembra che posso fare eagerloading con DbContext.Set(). Sqlquery, solo che non DbContext.Database.SqlQuery. Qualche idea del perché?

+0

DbContext.Set() sqlquery non fa eager loading; fa il caricamento pigro. È possibile vedere questo se si esegue l'output di SQL eseguito e si passa attraverso il codice utilizzando: db.Database.Log = message => {Debug.WriteLine (message); }; –

risposta

4

DbSet.SqlQuery funziona diversamente da Database.SqlQuery. Il metodo su DbSet si applica al set di entità specificato. Deve restituire entità del tipo specificato e per impostazione predefinita verranno tracciate le entità restituite. Database.SqlQuery può restituire qualsiasi oggetto (eventualmente non un'entità) e gli oggetti restituiti non vengono mai tracciati dal contesto. Si potrebbe anche voler dare un'occhiata a MSDN per confrontare entrambi i metodi:.

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

Grazie per la risposta. Conosco già la parte di tracciamento. Mi chiedo il motivo per cui le mie proprietà di navigazione non verranno popolate. Quando faccio join su tabelle con relazioni 1-M (raw sql), mi aspetto che le mie proprietà di navigazione siano caricate di nuovo. Funziona con DbContext.Set () .SqlQuery ma per qualche motivo, non con DbContext.Database.SqlQuery. – enamrik

+0

Puoi mostrare il codice dove popula le proprietà di navigazione? Entrambi i metodi alla fine chiamano ObjectContext.ExecuteStoreQuery e non penso che compili le proprietà di navigazione (almeno non quando ho provato). – Pawel

+0

Controlla questo https://gist.github.com/0xorial/6363788 – ironic

Problemi correlati