Il caricamento lento in Entity Framework è il fenomeno predefinito che si verifica per il caricamento e l'accesso alle entità correlate. Tuttavia, il carico impaziente è riferito alla pratica del caricamento forzato di tutte queste relazioni. Mi sono imbattuto nella domanda su quale situazione il carico impaziente potrebbe essere più vantaggioso del carico pigro. Chiedendo questo, perché è ovvio che il caricamento lazy è più favorevole alle risorse, e anche se usiamo il metodo ToList()
, possiamo ancora approfittare del comportamento di caricamento pigro. Tuttavia, ho pensato che forse il caricamento pigro aumentasse il numero di richieste al database reale e forse questo è il motivo per cui a volte gli sviluppatori usano il metodo Inlcude
per forzare il caricamento di tutte le relazioni. Ad esempio, quando si utilizza lo scaffolding automatico di Visual Studio in MVC 5, il metodo Index creato automaticamente nel controller utilizza sempre Eager Loading e ho sempre avuto la domanda sul motivo per cui Microsoft utilizza Eager Loading per impostazione predefinita in quel caso.
Sarei grato se qualcuno mi spiegasse in quale situazione il caricamento ansioso sarebbe più vantaggioso del caricamento pigro, e perché lo usiamo mentre c'è qualcosa di più amichevole come il Lazy Loading.
Penso che sia buono categorizzare relazioni come questa
Quando usare il carico desideroso
Quando utilizzare il caricamento lazy
Nota: come il Trascendente ha detto che potrebbe esserci un problema di smaltimento con il caricamento lento.
Caricamento di Eager: il caricamento di Eager ti aiuta a caricare tutte le entità necessarie contemporaneamente. cioè gli oggetti correlati (oggetti figlio) vengono caricati automaticamente con il suo oggetto genitore.
Quando usare:
Caricamento lento : in caso di caricamento lento, gli oggetti correlati (oggetti figlio) non vengono caricati automaticamente con l'oggetto principale fino a quando non vengono richiesti. Per impostazione predefinita LINQ supporta il caricamento lazy.
Quando usare:
NOTA: Entity Framework supporta tre modi per caricare i dati correlati: caricamento ansioso, caricamento lento e caricamento esplicito.