Come abbiamo visto nelle lezioni precedenti, ASP.Net MVC utilizza per convenzione una particolare struttura delle cartelle dei progetti. Pertanto i file relativi al Model (come le classi LINQ To SQL) trovano posto nella cartella Models.
Per le sue funzionalità automatiche legate a LINQ To SQL, Visual Studio fa uso di particolari file di mappatura con estensione .dbml. In questi file vengono descritte le tabelle e le classi C# che vengono loro associate. Selezioniamo la cartella Model e creiamo al suo interno un nuovo file LINQ To SQL chiamatoGallery.dbml:
A questo punto, con il file appena creato aperto, è sufficiente trascinare la tabella del database nello spazio di lavoro per creare una nuova classe LINQ To SQL:
Nello spazio di lavoro appare una rappresentazione grafica della classe che contiene al suo interno i campi della tabella GalleryImages:
Questa classe, chiamata GalleryImage, è stata creata automaticamente da Visual Studio e rappresenta ogni immagine. Ogni volta che interrogheremo il database tramite LINQ To SQL non avremo a che fare con le righe della tabella GalleryImages ma con una collezione fortemente tipizzata di oggetti GalleryImage.
Visual Studio crea in automatico anche un'altra classe, nel nostro caso chiamata GalleryDataContext, di tipo System.Data.Linq.DataContext. Questa classe è il punto di accesso che LINQ To SQL ci fornisce per selezionare e modificare i record contenuti nel database o per crearne di nuovi.
All'interno delle classi di tipo DataContext, Visual Studio genera una particolare proprietà per ogni tabella trascinata all'interno del file LINQ To SQL, che prende il nome dalla tabella a cui si riferisce. Ad esempio, nel nostro caso abbiamo trascinato nel file una sola tabella, GalleryImages, per cui avremo accesso soltanto ai record di quest'ultima attraverso una proprietà chiamata appunto GalleryImages. L'accesso ai dati è fortemente tipizzato in quanto i record sono memorizzati in oggetti di tipo GalleryImage come detto poco fa.
Possiamo accedere ai dati utilizzando una sintassi simile a questa:
// Creo una nuova istanza di GalleryDataContext
GalleryDataContext context = new GalleryDataContext();
// Seleziono la prima immagine presente nel database
GalleryImage image = context.GalleryImages.First();
// Accedo all'id dell'immagine
int id = image.ImageId;
// Accedo alla descrizione dell'immagine
string desc = image.Description;
Una delle caratteristche più interessanti della classe GalleryDataContext consiste nel fatto di essere dichiarata come partial. Possiamo quindi aggiungere alla classe generata da Visual Studio alcuni metodi di supporto:
public partial class GalleryDataContext
{
// Restituisce tutte le immagini
public List<GalleryImage> GetImages()
{
return this.GalleryImages.ToList();
}
// Restituisce un'immagine in base all'id
public GalleryImage GetImageById(int id)
{
return this.GalleryImages.FirstOrDefault(img => img.Id == id);
}
}
Questi metodi ci aiutano nella gestione della galleria di immagini, definiti in un file esterno chiamato GalleryDataContext.cs. A questo punto la cartella Models del progetto contiene quindi due file distinti:
Vedremo come utilizzare la classe LINQ To SQL e le funzioni appena definite parlando dei Controller e delle Viste.
Se vuoi aggiornamenti su .NET inserisci la tua email nel box qui sotto: