È possibile caricare un'entità escludendo alcune proprietà? Una delle proprietà di questa entità è costosa da selezionare. Vorrei caricare pigro questa proprietà. È possibile?Entity Framework 4 proprietà di carico lazy selettive
risposta
Ora che hai letto la risposta di tutti, ti darò la risposta corretta. EF non supporta il caricamento lazy delle proprietà. Tuttavia supporta un concetto molto potente di questo. Si chiama suddivisione delle tabelle in cui è possibile mappare una tabella a due entità. Supponiamo che una tabella di prodotto nel database possa essere mappata all'entità prodotto e all'entità ProductDetail. È quindi possibile spostare i campi costosi sull'entità ProductDetail e quindi creare un'associazione 1..1 tra prodcut e productdetail entity. È quindi possibile caricare l'associazione productdetail pigro solo quando è necessario. Nel mio capitolo sulle prestazioni del mio libro, ho una ricetta chiamata. 13-9. Spostare una proprietà costosa in un'altra entità
Spero che questo aiuti!
gli stimoli sono corretti, ma attenzione quando si utilizza il caricamento lazy. Potresti avere problemi di prestazioni e non rendersi conto che la proprietà viene caricata in una posizione specifica del tuo codice. Questo perché carica i dati quando si utilizza la proprietà
Preferisco utilizzare il caricamento esplicito. In questo modo sai quando vengono caricati e dove. Ecco un collegamento che fornisce un esempio per LoadProperty http://sankarsan.wordpress.com/2010/05/09/ado-net-entity-framework-data-loading-part-2/
È inoltre possibile caricare Eager utilizzando il metodo Include. Esempio qui: http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework
stimms e Dan, non voglio dire una proprietà correlata, mi riferisco a un campo (membro della classe) come Biografia (stringa in C# o varchar (1024) in SQL Server), che è davvero costoso da caricare con l'entità, mi piacerebbe caricarlo pigro quando necessario. Per quanto ne so, questo non funziona in EF4. C'è un modo per farlo? –
Quindi vuoi caricare pigro una proprietà scalare? Appena fuori dalla mia testa, potrei provare a suddividere la biografia in essa su Entity e impostarla come proprietà di navigazione. Allora sarei in grado di pigro/ansioso/expicit caricarlo. Potrebbe esserci un modo migliore ... metterò alla prova questa teoria quando avrò la possibilità. –
Grazie, sembra essere l'unico modo efficace. –
Con una struttura scalare, l'unico modo per selettivamente non caricare una certa proprietà è di proiettare in ESQL o L2E:
var q = from p in Context.People
select new
{
Id = p.Id,
Name = p.Name // note no Biography
};
+1 a Dan; fare questo pigramente è peggio che caricarlo in avanti. Se vuoi controllare il caricamento, sii esplicito.
Grazie per questo suggerimento. Sì, ma questa proiezione non è efficiente. In primo luogo, risulterebbe in un tipo anonimo che non può essere utilizzato direttamente da People. Un nuovo oggetto People deve essere creato e istanziato correttamente, il che sarà una perdita di tempo nell'analisi tra gli oggetti. Questo tipo non sarà tracciabile dal contesto. –
@Nazaf, stai ottimizzando prematuramente. –
- 1. Entity Framework lazy loading
- 2. Entity Framework Proprietà virtuali
- 3. Entity Framework 4 - Eredità
- 4. Entity Framework Code Primo carico pigro proprietà di navigazione non
- 5. Convenzioni Framework Entity 4
- 6. Creazione di proprietà blob con Entity Framework 4?
- 7. Entity Framework + Multiple Threads + Lazy Load
- 8. Entity Framework - Stop Lazy Caricamento di entità correlate su richiesta?
- 9. Entity framework 4 o DataSet?
- 10. Entity Framework 4.1 Proprietà virtuale
- 11. proprietà calcolate a Entity Framework
- 12. Lazy Load Entity Framework EntityCollection con i criteri
- 13. Disabilita il caricamento lazy per impostazione predefinita in Entity Framework 4
- 14. Entity Framework - Crea proprietà di navigazione
- 15. Entity Framework 4, che eredita rispetto all'estensione?
- 16. Entity Framework 4/POCO - Da dove cominciare?
- 17. Entity Framework 4 Tabella Valore Funzione
- 18. DB in memoria per Entity Framework 4
- 19. Ricerca Entity Framework 4 su campi combinati
- 20. Chiavi univoche in Entity Framework 4
- 21. Entity Framework 4 e valori predefiniti
- 22. Entity Framework 4 POCO con dizionario
- 23. MVC 4. e Entity Framework Tabella Registrati
- 24. Entity Framework 4 Multiple Object Delete (RemoveAll)
- 25. Come includere proprietà di navigazione ordinate con Entity Framework
- 26. Oggetto chiave esterna di riempimento in Entity Framework 4
- 27. Proprietà navigazione Entity Framework 7 è nullo
- 28. Entity Framework: selezionare la proprietà come Oggetto
- 29. pigro carico non funziona in Entity Framework 5
- 30. La convalida lato server di una proprietà stringa RICHIESTA in MVC2 Entity Framework 4 non funziona
Grazie. Dovrò farlo. Ma EF4 dovrebbe supportare il caricamento lazy su proprietà scalari, può essere davvero utile. –
So che il team sta lavorando per supportare le proprietà di caricamento lazy box nella prossima versione, ma penso che lo spostamento di colonne costose in un'altra entità apra le strade per ritardare il caricamento di numerose proprietà costose contemporaneamente. Immagina di avere un oggetto dipendente con EmployeePicture e una descrizione dell'addetto che sono entrambi costosi e che vuoi ritardare il caricamento di entrambi, ma ogni volta che vuoi caricarli, vuoi caricarli insieme. Questo è qualcosa che non puoi fare in linq a sql. – zeeshanhirani
Sì, se ci sono più di un campo costoso, in questo caso il team EF può abilitare un flag come LoadAllLazyProperties che consente a EF di caricare tutte le proprietà scalari contrassegnate come Lazy Load insieme, ogni volta che ne viene richiesto uno. Questo migliora le situazioni come quella che hai menzionato senza separare EntityTypes !! –