Introduzione a .NET RIA Services

8 pagine in totale: <<Indietro 1 2 3 ... [5] 6 7 8 Avanti >>

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.

8 pagine in totale: <<Indietro 1 2 3 ... [5] 6 7 8 Avanti >>

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.

Segnala su:  Facebook  Messenger  Twitter        |

TUTORIALS

Silverlight

.NET Framework

Accesso ai dati

Architettura e design software

Windows Azure

TOP TEN ARTICOLI
ARTICOLI VIA E-EMAIL

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

Iscrivi subito! »»»

MEDIA
IN EVIDENZA
MISC