SubSonic Resource Center

Utilizzare LINQ con Visual Web Developer Express 2008

Introduzione
L'articolo illustra tutti i passi necessari per integrare LINQ in un progetto creato con Visual Web Developer Express 2008. Si concentra in particolar modo su "LINQ To SQL", implementazione del .NET Framework che consente di creare e mappare tramite l'utilizzo di classi il Data Access Layer per l'accesso alla base dati.


Requisiti
Tutti i software qui elencati sono gratuiti.

Microsoft Visual Web Developer 2008 Express.
Link: http://www.microsoft.com/express/download/

Microsoft SQL Server 2005 Express.
Link: http://www.microsoft.com/express/sql/download/default.aspx

Microsoft SQL Server Management Studio Express (facoltativo).
Link: http://www.microsoft.com/express/sql/download/default.aspx

Subsonic (versione attuale: 2.1.0 beta 2).
Link: http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=5636


Codice di esempio allegato
E' possible scaricare a questo link il codice di esempio allegato all'articolo.


Creazione del dbml
Con l'introduzione di LINQ nel .NET Framework Microsoft ha messo a disposizione dell'utente un tool a riga di comando che consente di creare il dbml (file intermedio per la customizzazione del database) e il file di mapping senza dover necessariamente utilizzare la versione Professional di Visual Studio 2008. Si tratta del file "SqlMetal.exe", presente nella cartella "C:\Programmi\Microsoft SDKs\Windows\v6.0A\bin".
Partiamo da una semplice base dati:


Assicuriamoci che il nostro database sia presente tra quelli in elenco mostrati su SQL Server Management Studio Express (vedi fig. 2):


Da console (cmd) posizioniamoci nella cartella "C:\Programmi\Microsoft SDKs\Windows\v6.0A\bin" e digitiamo il seguente comando:

sqlmetal /server:.\SQLEXPRESS /database:ss_ita_demo /dbml:linqdemo.dbml /namespace:linqdemo


A seguito del commando viene creato il file intermedio linqdemo.dbml nella stessa cartella del tool "sqlmetal". Preleviamo con operazione di copia/incolla il suddetto file dbml e spostiamolo nella cartella "App_code" del nostro progetto creato con Visual Web Developer Express 2008.


Creazione del mapping dal dbml
Apriamo il nostro progetto con VWD Express 2008 e nel riquardo "Solution Explorer" individuiamo il file "linqdemo.dbml", presente nella cartella "App_code". Apriamolo col doppio click e nel riquadro che mostra tabelle e vincoli clicchiamo col destro in una zona vuota (fig. 3) e scegliamo la voce "Proprietà" dal menu contestuale.


Nel riquadro "Properties" individuiamo la voce "Connection" e assegniamo il valore "ss_ita_demo.mdf" presente nel menu a cascata. Salviamo la modifica apportata al file linqdemo.dbml.
Fatto questo, nel riquadro "Solution Explorer" clicchiamo col destro sul file "linqdemo.dbml" e scegliamo la voce "Run custom tool".
Il nostro file di mapping è adesso pronto per l'utilizzo.


Inclusione nel progetto della dll di LINQ
Perché tutto funzioni è necessario inserire nel progetto il riferimento alla DLL "System.Data.Linq". Nel riquadro "Solution Explorer" cliccare col destro sulla radice del progetto (prima riga) e dal menu contestuale scegliere la voce "Add reference". Selezionare il file "System.Data.Linq" e confermare la scelta.
Vediamo adesso un po' di codice.


Un primo esempio: LINQ all'opera
Ecco un esempio di inserimento dati:

linqdemo.Ss_ita_demo insdb = new linqdemo.Ss_ita_demo();
linqdemo.Prodotti prodToIns = new linqdemo.Prodotti();

prodToIns.Descrizione = tbDescr.Text;
prodToIns.Quant_per_unit = Convert.ToInt32(tbQuant.Text);
prodToIns.Prezzo_unit = Convert.ToDecimal(tbPrezUnit.Text);
prodToIns.Units_in_stock = Convert.ToInt32(tbUnitInMag.Text);
 

insdb.Prodotti.InsertOnSubmit(prodToIns);
insdb.SubmitChanges();


Il codice è estremamente lineare: si creano l'oggetto database e l'oggetto che si riferisce alla tabella su cui inserire il dato; si valorizzano le opportune proprietà e poi si lancia il comando che si occupa di salvare i dati come record nella tabella a cui l'oggetto fa riferimento.
Vediamo adesso un esempio di cancellazione dati:

linqdemo.Ss_ita_demo deldb = new linqdemo.Ss_ita_demo();
var
del_prodotti = from p in deldb.Prodotti where p.Id_prodotto.Equals(Convert.ToInt32(id_prodotto.Text))
                              
select p;

deldb.Prodotti.DeleteAllOnSubmit(del_prodotti);
deldb.SubmitChanges();


In questo caso viene creata una vera e propria interrogazione, che consente di individuare univocamente il record da eliminare. Fatto questo, si utilizza il metodo dell'oggetto relativo all'eliminazione dati, e il gioco è fatto.
La modifica è simile all'inserimento, ma prevede un'estrazione preliminare dei dati che vengono mostrati a video nelle relative caselle di testo.
Per un esempio completo ed esaustivo si raccomanda di fare riferimento al progetto di esempio allegato.


Conclusioni
L'articolo ha voluto dimostrare come sia estremamente semplice includere LINQ in una web application creata con la versione Express di Visual Studio (quindi a costo zero), e come sia altrettanto immediato l'utilizzo dello stesso per interagire con la base dati.



Inserimento, modifica e cancellazione di un record

Introduzione
L'articolo mostra il codice che consente di effettuare l'inserimento, la modifica e la cancellazione di un dato in una tabella.


Requisiti
Tutti i software qui elencati sono gratuiti.

Microsoft Visual Web Developer 2008 Express (va bene anche la versione 2005).
Link: http://www.microsoft.com/express/download/

Microsoft SQL Server 2005 Express.
Link: http://www.microsoft.com/express/sql/download/default.aspx

Microsoft SQL Server Management Studio Express (facoltativo).
Link: http://www.microsoft.com/express/sql/download/default.aspx

Subsonic (versione attuale: 2.1.0 beta).
Link:
http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=10395


Codice di esempio allegato
E' possible scaricare a questo link il codice di esempio allegato all'articolo.


Inserimento
Fig. 1:


Utilizziamo la tabella dei prodotti (vedi diagramma in fig. 1) e procediamo con l'inserimento di un nuovo record. Tramite il pulsante di inserimento presente nella pagina principale (default.aspx) veniamo reindirizzati alla form di inserimento dati. Una volta valorizzate le caselle di testo, è sufficiente selezionare il pulsante "salva" per effettuare l'inserimento delle informazioni sul database. Ecco il codice associato al pulsante di salvataggio:

ss_ita_demo.Prodotti prodIns = new ss_ita_demo.Prodotti();
prodIns.Descrizione = tbDescr.Text;
prodIns.QuantPerUnit = Convert.ToInt32(tbQuant.Text);
prodIns.PrezzoUnit = Convert.ToDecimal(tbPrezUnit.Text);
prodIns.UnitsInStock = Convert.ToInt32(tbUnitInMag.Text);
prodIns.Save();

Nel progetto allegato è possibile visionare l'esempio completo e funzionante di inserimento dati appena illustrato.


Modifica
In questo caso l'idea è di associare un pulsante di modifica dato ad ogni record della nostra griglia. Una volta selezionato il record che si vuole modificare, la procedura ci reindirizza alla pagina di modifica con le caselle di testo già valorizzate con i dati del nostro record. Una volta apportate le opportune modifiche, è sufficiente selezionare il pulsante "Salva" perché siano realmente applicate sul database. Ecco il codice che consente di applicare le modifiche:

ss_ita_demo.Prodotti prodMod = ss_ita_demo.Prodotti.FetchByID(idprod);
prodMod.Descrizione = tbDescr.Text;
prodMod.QuantPerUnit = Convert.ToInt32(tbQuant.Text);
prodMod.PrezzoUnit = Convert.ToDecimal(tbPrezUnit.Text);
prodMod.UnitsInStock = Convert.ToInt32(tbUnitInMag.Text);
prodMod.Save();

Come per l'inserimento, l'esempio completo è visionabile nel progetto allegato.


Cancellazione
L'operazione di cancellazione viene eseguita per comodità tramite un apposito pulsante presente in griglia. Ecco il codice di esempio:

Query qryDelete = new Query(ss_ita_demo.Prodotti.Schema);
qryDelete.QueryType = QueryType.Delete;
qryDelete.WHERE(ss_ita_demo.Prodotti.Columns.IdProdotto, Convert.ToInt32(id_prodotto.Text));
qryDelete.Execute();

Per la funzionalità completa fare riferimento al progetto allegato.


Conclusioni
In questo articolo abbiamo potuto apprezzare la semplicità di utilizzo delle funzioni di manipolazione dei dati che Subsonic mette a disposizione.



Un po' di codice: l'oggetto Query

Introduzione
In quest'articolo esamineremo l'oggetto Query, che ci consentirà di risolvere la quasi totalità di necessità relative alle interrogazioni sui dati.


Requisiti
Tutti i software qui elencati sono gratuiti.

Microsoft Visual Web Developer 2008 Express (va bene anche la versione 2005).
Link: http://www.microsoft.com/express/download/

Microsoft SQL Server 2005 Express.
Link: http://www.microsoft.com/express/sql/download/default.aspx

Microsoft SQL Server Management Studio Express (facoltativo).
Link: http://www.microsoft.com/express/sql/download/default.aspx

Subsonic (versione attuale: 2.1.0 beta 1).
Link: http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=10395


Codice di esempio allegato
E' possible scaricare a questo link il codice di esempio allegato all'articolo.


Premessa
Fino alla versione 2.0.3 Subsonic non supporta le join tra tabelle. Ok, niente panico. Questa caratteristica (assieme a molte altre) è supportata a partire dalla versione 2.1, attualmente ancora in beta. Per il momento tralasceremo queste nuove funzionalità, che saranno oggetto di discussione di un prossimo articolo.


Creazione dell'oggetto Query
Per la creazione dinamica di costrutti SQL per interrogare la base dati Subsonic mette a disposizione l'oggetto Query. Per la creazione dell'oggetto è fornito il metodo "CreateQuery". Ecco un esempio:

Subsonic.Query QDati = Ordini.CreateQuery();

In alternativa è possibile creare l'oggetto passando come parametro il nome della tabella o lo schema:

Subsonic.Query QDati = new Subsonic.Query(Ordini.TableName);

Subsonic.Query QDati = new Subsonic.Query(Ordini.GetTableSchema());


Esecuzione dell'oggetto Query
Il metodo "Execute" consente di eseguire la query e non restituisce nulla:

QDati.Execute();

Il metodo "ExecuteDataset" restituisce un dataset:

GridView1.DataSource = QDati.ExecuteDataset();

Il metodo "ExecuteReader" restituisce un datareader:

GridView1.DataSource = QDati.ExecuteReader();

Il metodo "ExecuteScalar" restituisce un singolo valore:

Label1.Text = QDati.ExecuteScalar().ToString();


Filtri e ordinamenti
La proprietà "SelectList" è utilizzata per limitare il numero di campi da considerare nell'estrazione dei dati. Vediamo la struttura delle tabelle:

 
Ecco un esempio di utilizzo della "SelectList":

myQuery.SelectList = ss_ita_demo.Prodotti.Columns.Descrizione + "," + ss_ita_demo.Prodotti.Columns.UnitsInStock;

Il metodo "AddWhere" consente di inserire una condizione nella query. Vediamo un esempio di utilizzo:

myQuery.AddWhere(ss_ita_demo.Prodotti.Columns.UnitsInStock, SubSonic.Comparison.Equals, 300);

Allo stesso modo possiamo utilizzare il metodo "AddBetweenValues" per estrarre i dati che rientrano in un determinato intervallo:

myQuery.AddBetweenValues(ss_ita_demo.Prodotti.Columns.UnitsInStock, 200, 300);

Risulta altrettanto semplice assegnare un ordinamento tramite il metodo "OrderBy".
Ordinamento ascendente:

myQuery.OrderBy = SubSonic.OrderBy.Asc(ss_ita_demo.Prodotti.Columns.Descrizione);

Ordinamento discendente:

myQuery.OrderBy = SubSonic.OrderBy.Desc(ss_ita_demo.Prodotti.Columns.Descrizione);

Per limitare il numero di record che la query restituisce esiste la proprietà "Top". Ecco un esempio:

myQuery.Top = "5";

E' possibile gestire la paginazione tramite le proprietà "PageIndex" e "PageSize". Un esempio di utilizzo è riportato nel codice allegato all'articolo. Nel caso specifico, è stato creato un vero e proprio controllo che estende la GridView integrando la paginazione con tutti i pulsanti e le indicazioni necessarie.


Funzionalità particolari
Il metodo dell'oggetto query "GetCount"consente di ottenere il numero di record estratti. Ecco un esempio di utilizzo:

int num = myQuery.GetCount(ss_ita_demo.Prodotti.Columns.Descrizione);

Il metodo "GetSql" consente di mostrare a video l'istruzione SQL utilizzata dalla query per estrarre i dati. Ecco un esempio:

lDati.Text = myQuery.GetSql();


Conclusioni
In questo articolo abbiamo visto l'utilizzo dell'oggetto Query come strumento per effettuare interrogazioni sui dati. In futuro, non appena la versione 2.1 di Subsonic uscirà dalla fase di beta, verrà rilasciato un articolo con le nuove caratteristiche dell'oggetto Query.



Novità dell'oggetto Scaffold in Subsonic 2.1

Ecco un elenco delle modifiche e nuove funzionalità dell'oggetto Scaffold nella nuova versione di Subsonic.

ScaffoldType
Adesso l'AutoScaffold è una modalità del controllo stesso, e viene attivato settando ad "Auto" la proprietà ScaffoldType (il default è "Normal"). Se la proprietà è impostata su "Auto", lo scaffold aggiunge due nuovi menu a cascata che consentono di selezionare il provider e la classe desiderati.

AutoGenerateManyToMany
Questa proprietà, impostata automaticamente a "true", consente di generare automaticamente i controlli per le relazioni "many to many" in basso, sotto la form di edit. Se questa modalità risulta troppo permissiva nelle tecniche di identificazione delle tabelle correlate, è sempre possibile tornare ad utilizzare il vecchio approccio.

UseEmbeddedStyles
Senza alcuno stile applicato, lo scaffold è oggettivamente brutto esteticamente. Se si imposta la proprietà UseEmbeddedStyles a "true", lo scaffold genera dinamicamente a runtime uno stile che lo rende più gradevole.
Ecco un esempio:


DropDownCssClass, CheckBoxCssClass
E' adesso possible legare una classe CSS ai controlli DropDown e CheckBox presenti all'interno dello scaffold.

Updated CRUD Operations
Con questa versione lo scaffold utilizza l'oggetto query per tutte le operazioni "CRUD", migliorando l'efficacia e le prestazioni delle stesse.



Un webcast per SubStage

E' stato pubblicato il primo webcast che illustra le funzionalità di SubStage, il tool allegato a Subsonic 2.1 beta 1 che consente di gestire in maniera visuale e con pochi click del mouse tutti gli aspetti di una web application in asp.net.
Ovviamente è da non perdere.
Ecco il link:
http://monk.thelonio.us/content/substage1/SubStage.swf



Avanti >>

  Pagina 1 di 3


<< September 2010 >>
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30  

ultimi inserimenti

archivi

informazioni

  • Numero di visite: 

salta a...

Youngportal community  Omniaproject  Open asp.net  Forum  Rss feed