2012-03-13 14 views
12

Ho letto che i proxy vengono utilizzati quando è necessario utilizzare il caricamento pigro e il rilevamento delle modifiche. In altre parole, per usare Lazy Loading devo abilitare i proxy.EF 4 - Caricamento lento senza proxy

Fin qui tutto bene.

il punto è che posso utilizzare il codice seguente per configurare il contesto in modo da non utilizzare un proxy e utilizzare ancora il caricamento lazy.

ctx = new SchoolEntities(); 
ctx.ContextOptions.ProxyCreationEnabled = false; 
ctx.ContextOptions.LazyLoadingEnabled = true; 

La proprietà ProxyCreationEnabled è correlata solo al proxy di rilevamento modifiche o mi manca qualcosa?

Qualcuno potrebbe spiegarlo con alcuni dettagli?

Grazie!

EDIT1

non sto usando POCO/DbContext. Sto usando un normale modello edmx EF con ObjectContext. So che l'importanza dei proxy per le entità POCO riguarda il rilevamento delle modifiche e il caricamento lento. Per quale motivo utilizzare Proxies in un modello EDMX regolare?

risposta

10

Quando si utilizzano le entità POCO con le funzionalità integrate di Entity Framework, è necessario abilitare la creazione del proxy per utilizzare il caricamento lazy. Quindi, con le entità POCO, se ProxyCreationEnabled è false, il caricamento lazy non si verificherà anche se LazyLoadingEnabled è impostato su true.

Con alcuni tipi di entità legacy (in particolare quelle che derivano da EntityObject) questo non era il caso e il caricamento lento funzionava anche se ProxyCreationEnabled è impostato su false. Ma non prendi questo per dire che dovresti usare le entità EntityObject - che ti causeranno più dolore.

Il flag ProxyCreationEnabled viene normalmente impostato su false quando si desidera garantire che EF non crei mai un proxy, probabilmente perché ciò causerà problemi per il tipo di serializzazione che si sta eseguendo.

Il flag LazyLoadingEnabled viene normalmente utilizzato per controllare se il caricamento pigro si verifica in tutto il contesto una volta stabilito che i proxy sono corretti. Ad esempio, potresti voler utilizzare i proxy per il rilevamento delle modifiche, ma disattivare il caricamento lento.

+0

Ricorderò che 'EntityObject' è una" entità legacy ":) Quando inizi a contrassegnarlo con l'attributo' [Obsolete] '? – Slauma

+0

Buona domanda. A cui non posso rispondere perché non so se e quando accadrà mai. Ma ne abbiamo discusso. –

+0

@ajcvickers, grazie per la tua risposta, ma, a meno che non comprenda correttamente, penso che mi sia sfuggita la parte più importante della domanda: se sto usando ObjectContext (e non DbContext), per cosa viene utilizzato ProxyCreationEnabled? Per abilitare la traccia di modifica? Come ho detto prima, questo non è per Lazy Loading, quindi, a cosa serve? – outlookrperson

Problemi correlati