Esiste un conflitto durante l'utilizzo della memorizzazione dei dati nella cache e del caricamento lento?
-
20-08-2019 - |
Domanda
Se intendo utilizzare la memorizzazione nella cache dei dati, devo preoccuparmi dei conflitti quando utilizzo anche il caricamento posticipato? Sembra che con linq sto perdendo il controllo dei miei dati.
Soluzione
Sia LinqToSql che EntityFramework forniscono entrambe le funzionalità (caricamento posticipato e memorizzazione nella cache dei dati).
Ad esempio, se inizialmente carichi un cliente, quel cliente verrà memorizzato nella cache e se lo chiedi di nuovo otterrai la stessa istanza.
Se non carichi gli ordini di un cliente durante quel caricamento iniziale, la proprietà Orders dell'istanza del cliente sarà in uno stato non caricato. Quando carichi tali ordini, le istanze dell'Ordine saranno disponibili tramite quella proprietà.
- LinqToSql caricherà la proprietà al primo utilizzo.
- EntityFramework caricherà la proprietà quando viene richiesto (utilizzando il metodo Load).
In entrambe le tecnologie, il contesto è la cosa che fa la memorizzazione nella cache ... quindi se usi più di un'istanza di contesto, potresti osservare diverse istanze del cliente che rappresentano davvero lo stesso cliente.
Rispondere alle tue domande nei commenti. Parlerò di LinqToSql, ma questa roba dovrebbe funzionare anche in EntityFramework.
- Ecco una spiegazione del caricamento differito vs immediato .
- Ecco una spiegazione dell'identità dell'oggetto e della memorizzazione nella cache .
se interrompo il caricamento posticipato, accetto che la memorizzazione dei dati nella cache continuerà a funzionare?
Sì, funzionerà. Tuttavia, non sono totalmente indipendenti.
- Ecco come disattivare la memorizzazione nella cache (è attivo per impostazione predefinita).
- Ecco come attivare il caricamento differito (è attivo per impostazione predefinita). Leggi questo , poiché spiega come interagiscono queste funzionalità.
il flush della cache dei dati dipende dal fatto che ci siano cambiamenti in datatable eo tempo?
Non è possibile scaricare o ripristinare la cache. Se si desidera una cache nuova, la cosa da fare è creare un nuovo DataContext. Ogni istanza di DataContext ha la propria cache.
- Esiste un modo per estrarre l'aggiornamento della cache con le modifiche nel database aka - Aggiorna .
- Non è possibile inoltrare le modifiche dal database alla cache.