2. Database locale per Win Phone 7.1
• Scenari d’uso
• SQL CE per WP 7.1
• Isolated Storage
• O/R Mapping
• Planner App Model
• Planner App Demo
• DB Schema Update
• Best Practices
• Tools
• Take away
3. Scenari d’uso
Applicazioni che fanno uso di archivi di
media grandezza sui quali occorre poter
fare ricerche complesse e che devono
restituire i dati con rapidità ed efficienza,
senza occupare notevoli spazi di memoria.
Applicazioni che consentono di operare
anche in modalità disconnessa su dati
ottenuti dalla rete.
4. SQL CE for WP7 - Intro
• Con Windows Phone 7.1 (Mango) la Microsoft propone una
soluzione per la gestione di database locale basata sulla
versione di SQL Compact per Windows Phone.
• E’ incluso nel S.O. quindi
non c’è alcuna libreria da
aggiungere al progetto e
di conseguenza la nostra
applicazione non viene
«appesantita».
5. SQL CE for WP7 – LINQ to SQL
• Usa una versione ridotta di LinqToSql che non può ne
eseguire direttamente comandi Transact-SQL ne
utilizzare il linguaggio DDL (Data Definition Language).
• Il motivo è semplice: SQL CE per WP7 è ottimizzato per
gli scenari d’uso di uno smartphone.
6. SQL CE for WP7 – Isolated storage
• Il database è contenuto nell’Isolated Storage, il che significa
che i dati non possono essere scambiati e utilizzati tra
applicazioni differenti ma solo localmente all’applicazione
che l’ha creato.
7. Application Isolated Storage
• E’ un’area di archiviazione riservata all’applicazione
• E’ identificata dall’Application Guid:
• Esiste un tool per copiare l’Isolated Storage nell’Hard
Disk del PC e viceversa (ISETool):
8. O/R Mapping Kindergarten
• Ad ogni tabella corrisponde una classe, le cui proprietà
rappresentano le colonne della tabella.
• Le istanze della classe rappresentano
le righe della tabella.
9. O/R Mapping - Code First
Il Mapping tra il modello ad oggetti e il database relazionale si
dichiara mediante attributi che decorano il codice delle classi:
10. O/R Mapping - Code First (part 2)
Per le relazioni si utilizza l’attributo Association:
13. Database Schema Update
• In caso di modifiche non distruttive, come ad esempio per
l’aggiunta di una colonna, si può usare la classe helper
DatabaseSchemaUpdater:
14. Best Practices
• Usare Skip/Take per
la Data Virtualization
e Large Batch Update
• Velocizzare gli
aggiornamenti con
unaVersion Column
• Minimizzare l’uso di
memoria con
INotifyPropertyChanging
15. Best Practices (part 2)
• La strategia da adottare per registrare i cambiamenti nel database
cambia di volta in volta, a seconda dello scenario d’uso.
• Per fare la scelta giusta, occorre tener presente i seguenti punti:
Il metodo SubmitChanges è sincrono e mantiene il controllo finché le modifiche non
sono registrate nel database.
L’applicazione ha un tempo limitato per salvare le modifiche quando viene chiusa.
• In generale, è buona pratica salvare le modifiche al passaggio da
una pagina all’altra dell’applicazione, e in ogni caso privilegiando
la registrazione dei dati modificati dall’utente.
Altre operazioni di sincronizzazione o modifica dei dati, relative
ad esempio a dati presenti on the cloud, possono sempre essere
ripetute in un secondo momento, perché SQL CE mantiene
l’integrità dei dati grazie all’uso delle transazioni.
16. Tools
• ISETool.exe
Command line tool per copiare dall’Isolated Storage al File
System del PC e viceversa:
ts - Take snapshot
rs - Restore snapshot
xd - target the emulator
de - target a device
• SQL Server Compact Toolbox (di Erik Ejlskov Jensen)
Visual Studio add-in scaricabile dalla Visual Studio Gallery:
ErikEJ
17. Take away
• Per operare col database si usa LINQ to SQL.
LINQ è utilizzato per le queries, T-SQL non è supportato
• Il file del database è contenuto nell’Isolated Storage dell’applicazione
• Non è necessario distribuire assemblies che aumentano il peso della nostra
applicazione perche con Windows Phone Mango il supporto per il database
locale è parte del framework.
• Una reference all’assembly System.Data.Linq deve essere aggiunto al progetto
• La stringa di connessione ha un formato speciale, del tipo:
"Data Source='isostore:/DIRECTORY/FILE.sdf'";
• In questa versione di Windows Phone 7.1 Mango è preferibile utilizzare la
modalità code-first per definire lo schema del database, visto che al momento non
c’è un Visual Designer che aiuti nel mappare e configurare le classi necessarie a
lavorare col database. In alternativa si può usare il plugin di Erich EJ, che
(utilizzando SqlMetal) genera le suddette classi in automatico, a partire da un
database SQL CE esistente.
• Requisiti minimi:
Visual Studio 2010 SP1 e Windows Phone 7.1 Mango Developer Tools