WP7 SQL Compact local database

Preview:

DESCRIPTION

Una itroduzione all'uso di SQL Compact com database locale per Windows Phone 7

Citation preview

Wp7 & SQL Compact

Nicolò Carandininicolo.carandini@domusdotnet.org

blogs.ugidotnet.org/Nick60

twitter.com/TPCWare

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

Scenari d’usoApplicazioni 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.

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. quindinon c’è alcuna libreria daaggiungere al progetto edi conseguenza la nostraapplicazione non viene«appesantita».

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.

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.

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):

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.

O/R Mapping - Code FirstIl Mapping tra il modello ad oggetti e il database relazionale si dichiara mediante attributi che decorano il codice delle classi:

Task.cs

O/R Mapping - Code First (part 2)Per le relazioni si utilizza l’attributo Association:

Task.cs

Project.cs

Planner App – Class diagram

Planner App

Demo

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:

Task.cs App.xaml.cs

Best Practices• Usare Skip/Take per

la Data Virtualizatione Large Batch Update

• Velocizzare gliaggiornamenti conunaVersion Column

• Minimizzare l’uso dimemoria conINotifyPropertyChanging

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.

Tools• ISETool.exe

Command line tool per copiare dall’Isolated Storage al File System del PC e viceversa:

• SQL Server Compact Toolbox (di Erik Ejlskov Jensen)

Visual Studio add-in scaricabile dalla Visual Studio Gallery:

ErikEJ

ts - Take snapshotrs - Restore snapshotxd - target the emulatorde - target a device

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 databaselocale è 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

Entity Framework AfternoonSponsor