La situazione è più o meno questa
CAso1: io chiedo a FooService una entità specificando la sua chiave primaria, tipo "dammi foo con id 23", lui prima guarda su IM se trova l'oggetto restituisce sempre quello, altrimenti lo prende dal db. Questo evita alias, ovvero evita che se il chiamante chiede due volte un foo con id 23 riceva due oggetti distinti.
Caso2: Io chiedo a FooService tutti i Foo con una certa caratteristica, tipo età > 20. Prima di tutto faccio un flush, ovvero scrivo nel db tutte le eventuali modifiche degli oggetti in memoria, secondo faccio la query al db where età > 20, terzo per ogni record tornato controllo la chiave se è nell'IM altrimenti ricostruisco l'oggetto.
Per la parte di flush devi tenere da qualche parte una copia dell'entità con i valori originali con cui confrontare poi i cambiamenti, oppure puoi richiedere che le entità iplementino INotifyPropertyChanged, etc.
alk.
--Blog Eng: http://www.codewrecks.com/blogBlog Ita: http://blogs.ugidotnet.org/rgmTwitter: http://twitter.com/alkampfer
petrux:Ciao alkampfer Ok, anche questo è chiaro... o meglio, credo sia chiaro. :-) Se non ho capito male il flush serve per evitare che sessioni concorrenti accedano a valori inconsistenti, giusto?
Non propriamente, quella che tu dici è la concorrenza. Il flush serve perchè tu fai la query al database, ma nel frattempo i dati in memoria potrebbero essere cambiati. Il flush serve quindi a propagare le modifiche in memoria al db, cosi quando esegui la query nel db sei sicuro che i dati siano gli stessi di quelli in memoria.
petrux: > Per la parte di flush devi tenere da qualche parte una copia dell'entità > con i valori originali con cui confrontare poi i cambiamenti, oppure > puoi richiedere che le entità iplementino INotifyPropertyChanged, etc. Questo invece mi è oscuro. Ai fini del flush (e *solo* ai fini del flush) sapere se una entità è cambiata mi serve solo per scegliere se richiamare l'update o no, giusto?
> Per la parte di flush devi tenere da qualche parte una copia dell'entità > con i valori originali con cui confrontare poi i cambiamenti, oppure > puoi richiedere che le entità iplementino INotifyPropertyChanged, etc. Questo invece mi è oscuro. Ai fini del flush (e *solo* ai fini del flush) sapere se una entità è cambiata mi serve solo per scegliere se richiamare l'update o no, giusto?
Si infatti, il flush confronta i valori delle proprietà dell'oggetto al momento del caricamento, con quelli attuali. In questo modo capisce se tu hai cambiato qualche proprietà e genera le update corrispondenti .
Felice di averti aiutato. ciao ciao e Buona giornata anche a te. :)