Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF e Model-View-ViewModel: esempio di cambio data store

Dopo un po' di tempo che non parlavamo di Model-View-ViewModel, riprendiamo il discorso ricordando uno dei benefici che menzionammo all'inizio della serie. In particolare dicemmo che uno dei vantaggi di MVVM, unito all'utilizzo di uno strato di servizi, consente di cambiare il data store senza troppe modifiche.

In questo post vedremo come sostituire il database di SQL Server Northwind, che abbiamo utilizzato per la demo con Entity Framework, con l'equivalente basato su SQL Compact 3.5. Premetto che c'è più di una strada e che utilizzerò quella più "macchinosa" per chiarire i passaggi, mentre in fondo al post descriverò una possibile alternativa. Inoltre tengo a precisare che per "macchinoso" intendo il lavoro di cambio del data store, ma la cosa veramente interessante è che non faremo alcuna modifica nè a ViewModel nè a View.

Detto questo, armiamoci della soluzione sorgente completa disponibile in area Download di VB T&T qui. Una volta aperta in Visual Studio 2010, andiamo nel progetto chiamato DAL che funge da data access layer esponendo il modello di Entity Framework. Di tutti i file presenti, rimuoviamo Northwind.edmx e App.config lasciando invariato tutto il resto. Poi eseguiamo i seguenti passaggi per aggiungere un nuovo EDM:

  1. tramite Project|Add new item, aggiungiamo un nuovo Entity Data Model chiamato Northwind.edmx, con le modalità che sappiamo, specificando che vogliamo crearlo a partire da un database esistente;
  2. quando ci viene chiesto di specificare il database, facciamo clic su New Connection e, sempre tramite le modalità che conosciamo, selezioniamo dapprima il provider Microsoft SQL Server Compact Edition quindi il file Northwind.sdf. Se non sapete dove trovarlo, nella cartella C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Samples ce n'è una copia, ricordando che se lo pescate da questa cartella Visual Studio dev'essere eseguito con privilegi amministrativi (in Windows Vista/Seven).
  3. selezioniamo le medesime tabelle di interesse, quindi Customer, Order e Order_Detail.

Quando il nuovo Entity Data Model è pronto dobbiamo fare qualche piccola modifica affinché sia compatibile col ViewModel. In particolare, differentemente da quanto avviene con la versione SQL Server di Northwind, i nomi delle proprietà delle entity contengono caratteri underscore quando composti da più parole. Ad esempio, avremo Customer_ID anziché CustomerID. Il gioco è quindi rinominare tutte le proprietà che contengono l'underscore, rimuovendolo. Per rinominare una proprietà è sufficiente fare clic destro e scegliere Rename. Da ultimo, copiamo la nuova stringa di connessione così generata anche nell'App.config del progetto client. Basta :-)

E' sufficiente avviare l'applicazione per vedere che tutto funziona esattamente come nella versione precedente, basata sull'altro database. Il tutto, come detto, senza fare alcuna modifica a View, ViewModel e service layer. E' quindi evidente come il livello di separazione offerto da MVVM sia veramente utile.

All'inizio del post vi accennavo a modalità alternative e forse meno macchinose per raggiungere lo stesso obiettivo, ma non per questo meno "complicate". Si potrebbe infatti aggiungere il database Northwind.sdf al progetto e modificare la stringa di connessione originaria con questa:

    <add name="NorthwindEntities" 
         connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;provider=System.Data.SqlServerCe.3.5;provider connection string="Data Source=|DataDirectory|\Northwind.sdf"" 
         providerName="System.Data.EntityClient" />

Quindi bisogna aprire il file Northwind.edmx in visualizzazione XML e modificare manualmente la mappatura delle proprietà che hanno l'underscore. Qualunque sia la modalità prescelta, il discorso è chiaramente legato all'esempio proposto in questo post che comunque mostra un altro dei benefici di MVVM.

Alessandro

Print | posted on domenica 10 ottobre 2010 19:56 | Filed Under [ Visual Basic Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET