penso le classi che vengono generati utilizzando il generatore DbContext useranno solo "i proxy lazy loading" e non "il rilevamento delle modifiche proxy" (nota ci sono due tipi di proxy) come descritto in http://blogs.msdn.com/b/adonet/archive/2009/12/22/poco-proxies-part-1.aspx. Come hai sottolineato, tutte le proprietà mappate devono essere virtuali affinché i proxy di monitoraggio delle modifiche funzionino. Questo non è richiesto solo per i proxy di caricamento lazy (dove solo le proprietà di navigazione devono essere virtuali).
Penso che Microsoft dovrebbe cambiare questo nel modello T4 perché senza i proxy di rilevamento delle modifiche, è molto più lento. Soprattutto se hai molte entità nel contesto dell'oggetto.
Sono stato in grado di confermare questo. Nel libro Programming Entity Framework: DbContext, a pagina 66 ne parla. È possibile utilizzare un codice simile al seguente per verificare che un oggetto stia utilizzando un proxy per il rilevamento delle modifiche.
Person p = context.People.Find(123);
bool b = p is IEntityWithChangeTracker;
Sono sorpreso che il modello T4 non rende tutte le proprietà virtuali per impostazione predefinita. Sembra uno strano controllo a meno che non ci sia una ragione per cui lo hanno fatto intenzionalmente per qualche motivo.
fonte
2012-04-30 19:22:01
Questa domanda riguarda in parte le cose qui: http://stackoverflow.com/questions/5340990/ado-net-dbcontext-generator-vs-ado-net-poco-entity-generator – gregmac
My 2cents. L'API DbContext (utilizza il primo modello t4 del codice) è solo un wrapper attorno a ObjectContext (che utilizza il modello P4 di T4). Quindi, probabilmente, non dovresti perdere nessuna funzionalità, ma al momento attuale (se lavori con limiti di tempo), ti consiglio di utilizzare ObjectContext perché l'aiuto ti arriverà prima ed è molto ben documentato. Ho pensato che tutte le proprietà sono contrassegnate come virtuali in entrambi i modelli T4 per la generazione di proxy dinamici. Buono a sapersi non è il caso – DotNetInfo
Ciao, non so se sei ancora con questo, ma penso che dovresti provare EF 4.1. I proxy dinamici vengono generati automaticamente attorno alle classi POCO generate da un generatore DbContext. Nessuna parola chiave virtuale necessaria per il rilevamento delle modifiche, ad esempio. E se hai bisogno di ObjectContext, puoi accedervi da de DbContext (dopo alcune operazioni di cast), quindi non perdi nessuna funzionalità –