Usare Entity Framework 4.1 Code- First e SQL CE 4.0 per gestire un servizio di push notifications
Posted by qmatteoq in Windows Phone Tutorials on Monday 02 May 2011 at 10:00 AM
Abbiamo già affrontato in passato la “teoria” necessaria per capire cosa sono le push notifications e l’architettura messa in piedi da Microsoft per poterle utilizzare nelle applicazioni Windows Phone.
In questa prima serie di post vedremo come creare un semplice “ecosistema” per l’utilizzo delle push notifications, composto da:
- Un client, ovvero l’applicazione Windows Phone che riceverà le notifiche.
- Un server, ovvero una applicazione WPF che invierà le notifiche verso i device. Per realizzarla, sfrutteremo una delle “ricette” di Windows Phone: Notification Push Server Library, ovvero una libreria realizzata dal team di Windows Phone che wrappa tutto il codice necessario all’invio delle notifiche push, esponendoci dei semplici metodi che richiedono in input solamente i parametri della notifica.
- Un servizio WCF, che farà da ponte tra le due applicazioni: client e server si scambieranno le informazioni necessarie per gestire l’invio delle notifiche tramite questo database.
Giusto per mettere un po’ di carne al fuoco, utilizzeremo due recenti tecnologie di Microsoft per implementare concretamente il nostro scenario. Scopo di questo tutorial sarà quello di famigliarizzare con le notifiche push e con il loro funzionamento.
Entity Framework 4.1 Code First
Entity Framework è l’ORM di casa Microsoft: ORM sta per Object-relation Mapping e identifica tutti quei prodotti che nascono con lo scopo di “astrarre” allo sviluppatore la presenza di un database, consentendogli di lavorare con le strutture ad oggetti con cui è famigliare. L’ORM si occuperà, dietro le quinte, di tramutare le operazioni con i nostri oggetti in query SQL, che verranno eseguite sul database. In realtà, gli ORM che troviamo sul mercato sono molto più di questo: permettono infatti un livello di configurazione e di ottimizzazione che ci consente di lavorare con i database in maniera molto più efficace rispetto all’uso tradizionale di query SQL.
Entity Framework è la soluzione proposta da Microsoft e si distingue dalle altre per l’ottimo livello di integrazione con Visual Studio e le tecnologie Microsoft: strumenti visuali, tool di configurazione e quant’altro aiutano lo sviluppatore ad essere operativo il prima possibile. Ci sono tanti altri ORM sul mercato: uno dei più famosi è NHibernate (porting in .NET di Hibernate, ORM facente parte del mondo Java), che offre un grado di potenza e flessibilità che Entity Framework non è ancora riuscito a raggiungere; tutto questo viene “pagato” in termini di maggiore complessità per la configurazione e il mapping (ovvero la fase in cui si definisce la corrisponde tra oggetti e tabelle del database).
Code First è un nuovo metodo di mapping che è stato introdotto con la versione 4.1 di EF, di recentissima uscita (la RTM è stata rilasciata in occasione del MIX): questo metodo è molto comodo quando, come nel nostro caso, stiamo partendo con un progetto da zero, per il quale non esiste già un database pronto da utilizzare. Questo sistema consente di iniziare come faremmo con un progetto tradizionale, ovvero definendo le classi che compongono il dominio: rispettando una serie di convenzioni durante la scrittura del codice, Entity Framework sarà in grado di generare in automatico il database e le tabelle necessarie.
In rete ci sono molti articoli che su questa tecnologia scendono molto più in profondità di quanto faremo noi in questo progetto: vi segnalo ad esempio questo di Stefano Mostarda pubblicato su ASPItalia.
Per utilizzare Entity Framework 4.1 ci sono molti modi: potete scaricare il package ufficiale (che installa anche alcuni template di sviluppo), oppure cercarlo su NuGet, l’estensione di Visual Studio che funge da aggregatore in un unico package manager delle tantissime librerie .NET disponibili in rete.
SQL CE 4.0
SQL CE è una versione standalone di SQL Server, che permette di creare database disconnessi, ovvero che non richiedono un DBMS in esecuzione per poter funzionare e che vengono salvati come file su disco. Ovviamente, le performance e le potenzialità sono molto diverse rispetto ad un DBMS tradizionale: la complessità del progetto che stiamo per realizzare però è veramente bassa e, dato che sarà una demo, il carico di lavoro non sarà di certo un problema. Ecco perciò che possiamo approfittare di questa occasione per fare qualche esperimento con l’ultimissima versione di SQL CE, la 4.0 per l’appunto, che ha introdotto come principale novità il supporto alle applicazioni web ASP.NET in modalità “medium trust” (ciò significa che possiamo fare il deploy sul server del nostro database come se fosse un qualsiasi altro file del progetto, dandoci la possibilità di utilizzare un database senza avere a disposizione un server db dedicato).
La buona notizia è che SQL CE 4.0 supporta Entity Framework: potremo quindi usare l’ORM di casa Microsoft per mappare le nostre classi con le tabelle sul database come se si trattasse di un normale SQL Server.
Il modo migliore per installare SQL CE 4.0 è usare la Web Platform Installer, il package manager ufficiale di Microsoft che con pochi semplici click vi permette di installare tutta una serie di tools (come le varie versioni Express di Visual Studio, oppure il supporto a ASP.NET MVC 3) e prodotti (CMS, blog engine, ecc.).
I pacchetti da cercare e installare sono due: Microsoft SQL Server Compact 4.0 (la piattaforma vera e propria) e Microsoft SQL Server Compact 4.0 Tools (i tools che da Visual Studio vi permettono di interagire con i database SQL CE 4.0 come se fossero dei normali database SQL Server: potrete creare tabelle, eseguire query, inserire dati, ecc.).
Per poter lavorare con SQL CE 4 utilizzando Entity Framework è necessario installare un’ulteriore libreria, disponibile sempre su NuGet: utilizzando la funzione Add Library Package Reference che è disponibile facendo doppio clic su un progetto in Visual Studio dobbiamo cercare e installare la libreria EntityFramework.SqlServerCompact.
Per cosa useremo queste tecnologie?
Entrambe le tecnologie verranno usate per il servizio, che farà da ponte tra client e server:
- Se ricordate, ad ogni device che si registra per ricevere le notifiche push viene assegnato un URL univoco, al quale dovremo inviare le notifiche sotto form di POST HTTP di un XML. Il servizio si occuperà, quando il device avrà creato il canale di ricezione delle notifiche, di riceverne l’URL e di memorizzarlo nel database SQL CE.
- L’applicazione server, quando dovrà inviare la notifica, si collegherà al servizio per richiedere l’elenco dei device con i rispettivi URL che identificano i canali.
In entrambi i casi, non andremo mai a salvare o leggere informazioni dal database “manualmente” scrivendo query SQL, ma useremo Entity Framework per fare tutte le operazioni.
In questo post abbiamo posto tutte le basi teoriche necessarie per iniziare con i lavoro: nel prossimo post inizieremo a sporcarci un po’ le mani, iniziando a definire il servizio.

Recent Comments