Stiamo scrivendo un'applicazione WPF utilizzando il framework Entity (Silverlight con i servizi RIA per la precisione). Usiamo un ObjectContext condiviso attraverso l'applicazione in modo che possiamo beneficiare della condivisione dei dati tra i moduli.Entity Framework ObjectContext nell'applicazione windows/WPF/Silverlight
Il problema è che se l'utente durante il suo lavoro si apre diciamo vendite storiche, viene caricato nell'ObjectContext e rimane lì fino alla fine dell'applicazione. Quindi dovrebbe essere usato un altro modello.
So che ObjectContexts deve essere utilizzato come singola unità di lavoro. Ma poi, come fai a sapere che altre parti dell'applicazione sanno che qualcosa è cambiato e che dovrebbero ricaricare i loro dati?
Modifica: Ok, EventAggregator, ma in questo modo tutte le altre parti ricaricheranno i dati (probabilmente molti di essi duplicati). Probabilmente anche molti eventi sarebbero necessari per tutti i tipi di gruppi di entit.
Come risolvete questi problemi? La mia soluzione attuale è una sorta di compromesso: utilizzare un ObjectContext condiviso per i dati principali utilizzati dall'intera applicazione in modo che possano essere condivisi e aggiornati automaticamente. E per la grande quantità di dati, usa un nuovo ObjectContext separato. Qualche idea migliore?
Esiste un modo per "rilasciare" entità dal proprio DataContext in modo che Garbage Collector possa svolgere il proprio lavoro e rilasciare la memoria?
Con questa applicazione, stiamo parlando di Silverlight. Usando Prism/Caliburn, credo che non sia un problema avere un singolo ObjectContext per view (modulo?). Anche in questo caso, il problema è: se ci sono molti dati da caricare sul client? Per ora come ora, la soluzione migliore sarebbe quella di creare un ObjectContext condiviso per le entità di base che vengono utilizzate attraverso l'intera applicazione in modo che siano sincronizzate automaticamente e separare ObjectContexts per il caricamento di una grande quantità di dati, ad es. alcuni rapporti storici. – gius
Non proverei a inviare blocchi di dati veramente grandi al client. Invece, vorrei filtrare sul server e restituire solo i risultati che il cliente vuole vedere in quel momento. Gli umani non possono leggere 100.000 record, quindi non inviarli a un umano. Invece, lascia che il problema sia una ricerca/filtro e invii solo i risultati al cliente. Se si stanno creando report, creare i dati di riepilogo aggregati sul server. Ad esempio, sarebbe meglio calcolare il volume delle vendite mensili sul server e inviare un singolo numero al client piuttosto che vedere 5000 record di vendite. –
Questo è vero, ma se l'utente vede in qualsiasi momento durante la vita dell'applicazione diciamo le pagine 1, 10, 20, quei dati saranno ancora in memoria. D'altra parte, l'utilizzo di un ObjectContext separato e il paging dei dati potrebbero risolvere il problema dei dati di grandi dimensioni in memoria. – gius