Introduzione a .NET RIA Services
di Cristian Civera, in Windows Communication Foundation, 19 maggio 2009
Archiviato in: WCF RIA Services
Tracking delle modifiche
Come già anticipato, la classe Entity, dalla quale eredita la auto generata Message, espone già molti comportamenti utili al Binding, ma offre anche funzionalità di tracking delle modifiche apportate ad essa. Proprietà come HasChanges e EntityState permettono di conoscere se è stata modificata e qual è lo stato attuale, mentre con GetOriginal è possibile ottenere l'entità originale.
Inoltre, la classe GuestbookContextEntityContainer, generata anch'essa dal motore, che eredita da EntityContainer è in grado di conoscere quali elementi sono stati modificati e di mantenere una cache degli elementi in base al loro identity, specificato lato server attraverso l'attributo Key. In questo modo, per tutta l'istanza del contesto, se uno o più DomainOperation restituiscono la medesima entità, l'istanza client restituita sarà sempre la stessa, favorendo il binding e mantenendo le modifiche ad essa già apportate. E' comunque possibile cambiare questo comportamento attraverso il parametro MergeOption dei metodi di Load (nell'esempio ListMessages).
Poiché il DomainContext si presta molto bene ad essere utilizzato in Binding nel markup XAML, si può valutare facilmente l'idea di impostare una sua istanza come DataContext di una intera Page e interrogare alcune sue proprietà.
Quindi nel codice si può scrivere:
private GuestbookContext context; public HomePage() { InitializeComponent(); context = new GuestbookContext(); this.DataContext = context; }
Nel markup:
<TextBlock Text="HasChanges" /> <TextBlock Text="{Binding HasChanges}" /> <ListBox ItemsSource="{Binding Messages}" DisplayMemberPath="Preview"> </ListBox>
Se la modifica di un'entità può avvenire semplicemente cambiando le sue proprietà e quindi sfruttando i nuovi controlli DataForm e DataGrid, l'inserimento o la cancellazione della stessa può avvenire aggiungendo o togliendo elementi dalla collezione delle entità, funzionalità anch'esse supportate dai nuovi controlli. Nell'esempio preso in considerazione in questo articolo si può in alternativa cancellare o inserire un elemento in questo modo:
// Elimino il primo messaggio context.Messages.Remove(context.Messages.First()); // Aggiungo un nuovo messaggio Message m = new Message { PostDate = DateTime.Now, Text = "test", AuthorEmail = "cristian@aspitalia.com" }; context.Messages.Add(m);
E' importante sottolineare che tutte queste operazioni di gestione vengono tracciate e solo all'atto della chiamata a SubmitChanges del DomainContext queste vengono tutte inviate in batch al server e in asincrono.
private void saveButton_Click(object sender, RoutedEventArgs e) { // Invia in asincrono le modifiche context.SubmitChanges(); }
Gli eventi Submitting, Submitted e la proprietà IsSubmitting permettono di intercettare quando questa operazione avviene, di conoscere il change set, di annullare l'operazione o semplicemente di cambiare l'interfaccia in funzione di queste informazioni.
Contenuti dell'articolo
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimeti
-
Introduzione a Team Foundation Server 2010
-
Multithreading e parallelismo con il .NET Framework 4.0
-
Le novità nel .NET Framework 4.0 di WPF, WCF e WF
-
Le novità di Visual Basic 2010 e C# 4
-
Mostrare le camere di sorveglianza tramite il .NET Micro Framework
-
La piattaforma Microsoft per il cloud computing: Windows Azure
-
Interoperabilità con WCF: invocare servizi da PHP e Flash
-
Le novità di Windows 7 per gli sviluppatori
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Costruire una chat per Silverlight con il PollingDuplexHttpBinding

Commenti
mi piace
non mi piace
Facebook
Twitter









