Introduzione a Entity Framework
Entity Framework è un insieme di tecnologie ADO.NET che supportano lo sviluppo di applicazioni software orientate ai dati. Gli architetti e gli sviluppatori di questo tipo di applicazioni si trovano nella difficile condizione di dover realizzare due obiettivi molto diversi tra loro, ovvero la modellazione delle entità, delle relazioni e della logica dei problemi aziendali che sono preposti a risolvere e al tempo stesso la gestione dei motori dei dati utilizzati per archiviare e recuperare i dati stessi. Dal momento che i dati potrebbero essere distribuiti in più sistemi di archiviazione, ciascuno con i suoi protocolli, è necessario che nelle applicazioni che gestiscono un solo sistema di archiviazione venga rispettato l'equilibrio tra i requisiti del sistema di archiviazione e i requisiti di scrittura di codice dell'applicazione efficiente e gestibile.
Entity Framework consente agli sviluppatori di utilizzare i dati sotto forma di proprietà e oggetti specifici di un dominio, ad esempio clienti e indirizzi dei clienti, indipendentemente dalle colonne e dalle tabelle di database sottostanti in cui sono archiviati. Per ottenere questo risultato, è necessario elevare il livello di astrazione al quale gli sviluppatori possono lavorare quando gestiscono i dati e ridurre il codice richiesto per creare e gestire le applicazioni orientate ai dati. Poiché Entity Framework è un componente di .NET Framework, le applicazioni Entity Framework possono essere eseguite su qualsiasi computer in cui è installato .NET Framework 3.5 Service Pack 1 (SP1).
Realizzazione dei modelli concettuali
Uno schema di progettazione comune e ormai consolidato per la modellazione dei dati prevede la suddivisione del modello di dati in tre parti: un modello concettuale, un modello logico e un modello fisico. Il modello concettuale definisce le entità e le relazioni nel sistema da modellare. Il modello logico per un database relazionale normalizza le entità e le relazioni in tabelle con vincoli di chiave esterna. Il modello fisico gestisce le funzionalità di un determinato motore dei dati specificando dettagli sull'archiviazione come il partizionamento e l'indicizzazione.
Il modello fisico viene ridefinito dagli amministratori del database per migliorare le prestazioni, ma i programmatori che scrivono il codice delle applicazioni tendono a utilizzare solo il modello logico scrivendo query SQL e chiamando stored procedure. I modelli concettuali in genere vengono utilizzati come uno strumento per l'acquisizione e la comunicazione dei requisiti di un'applicazione, spesso come diagrammi inerti visualizzati e discussi nelle fasi iniziali di un progetto e quindi abbandonati. Molti team di sviluppo saltano la fase di creazione di un modello concettuale e partono direttamente dall'indicazione di tabelle, colonne e chiavi in un database relazionale.
Entity Framework favorisce la realizzazione dei modelli concettuali in quanto consente agli sviluppatori di eseguire query su entità e relazioni del modello concettuale basandosi al tempo stesso su Entity Framework per convertire le operazioni in comandi specifici dell'origine dati. Le applicazioni non sono quindi più vincolate a dipendenze hard-coded su una determinata origine dati. Il modello concettuale, il modello di archiviazione e il mapping tra i due modelli sono espressi in una specifica esterna, nota come Entity Data Model (EDM). Il modello di archiviazione e i mapping possono cambiare in base alle esigenze senza richiedere modifiche al modello concettuale, alle classi di dati o al codice dell'applicazione. Poiché i modelli di archiviazione sono specifici del provider, è possibile utilizzare un modello concettuale coerente in varie origini dati.
Un modello EDM viene definito dai tre file modello e di mapping riportati di seguito che includono le estensioni del nome file corrispondenti:
File CSDL (Conceptual Schema Definition Language) con estensione csdl: definisce il modello concettuale.
File SSDL (Store Schema Definition Language) con estensione ssdl: definisce il modello di archiviazione, chiamato anche modello logico.
File MSL (Mapping Specification Language) con estensione msl: definisce il mapping tra il modello di archiviazione e il modello concettuale.
Questi file modello e di mapping basati su XML vengono utilizzati da Entity Framework per trasformare le operazioni di creazione, lettura, aggiornamento ed eliminazione di entità e relazioni del modello concettuale in operazioni equivalenti nell'origine dati. Il modello EDM supporta anche il mapping di entità del modello concettuale a stored procedure dell'origine dati. Per ulteriori informazioni, vedere Modellazione dei dati in Entity Framework.
Esecuzione del mapping di oggetti ai dati
La programmazione orientata a oggetti pone una serie di sfide relativamente all'interazione con i sistemi di archiviazione dei dati. Anche se l'organizzazione delle classi in genere rispecchia da vicino l'organizzazione delle tabelle dei database relazionali, non si può parlare di una corrispondenza esatta. Più tabelle normalizzate corrispondono spesso a una singola classe e le relazioni tra classi sono rappresentate in modo diverso rispetto alle relazioni tra tabelle. Per rappresentare il cliente per un determinato ordine, ad esempio, una classe Order utilizza una proprietà contenente un riferimento a un'istanza di una classe Customer, ma una riga della tabella Order in un database contiene una colonna o un insieme di colonne di chiave esterna con un valore che corrisponde a un valore di chiave primaria nella tabella Customer. Una classe Customer potrebbe disporre di una proprietà denominata Orders contenente un insieme di istanze della classe Order, ma la tabella Customer in un database non include colonne confrontabili.
Le soluzioni esistenti hanno tentato di colmare questo divario, spesso definito "mancata corrispondenza dell'impedenza" eseguendo solo il mapping di classi e proprietà orientate a oggetti a tabelle e colonne relazionali. Anziché adottare questo approccio tradizionale, Entity Framework esegue il mapping di tabelle relazionali, colonne e vincoli di chiave esterna dei modelli logici a entità e relazioni dei modelli concettuali. Il risultato ottenuto è una maggiore flessibilità nella definizione degli oggetti e nell'ottimizzazione del modello logico. Gli strumenti di Entity Data Model generano classi di dati estensibili basate sul modello concettuale. Queste classi sono classi parziali che è possibile estendere con membri ulteriori aggiunti dallo sviluppatore. Le classi generate per un particolare modello concettuale derivano da classi di base che forniscono Object Services per la materializzazione di entità come oggetti e per il rilevamento e il salvataggio delle modifiche. Possono essere utilizzate dagli sviluppatori per gestire le entità e le relazioni come oggetti correlati da proprietà di navigazione. Per ulteriori informazioni su Object Services, vedere Cenni preliminari su Object Services (Entity Framework).
Accesso e modifica di dati dell'entità
Oltre a rappresentare una soluzione di mapping relazionale a oggetti, Entity Framework è uno strumento che consente alle applicazioni di accedere e modificare i dati rappresentati come entità e relazioni nel modello concettuale. Object Services utilizza il modello EDM per tradurre le query di oggetto eseguite su tipi di entità rappresentati nel modello concettuale in query specifiche dell'origine dati. I risultati della query vengono materializzati in oggetti gestiti da Object Services. In Entity Framework sono disponibili i seguenti metodi per eseguire query su un modello EDM e restituire oggetti:
LINQ to Entities: fornisce il supporto LINQ (Language-Integrated Query) per l'esecuzione di query su tipi di entità definite in un modello concettuale. Per ulteriori informazioni, vedere Panoramica su LINQ to Entities.
Entity SQL: sottolinguaggio di SQL indipendente dall'archiviazione che utilizza direttamente le entità del modello concettuale e supporta funzionalità EDM come l'ereditarietà e le relazioni. Entity SQL viene utilizzato sia con query di oggetto che con query eseguite tramite il provider EntityClient. Per ulteriori informazioni, vedere Panoramica su Entity SQL.
Metodi del generatore di query: consentono di creare query Entity SQL mediante metodi di query in stile LINQ. Per ulteriori informazioni, vedere Metodi del generatore di query (Entity Framework).
Entity Framework include il provider di dati EntityClient. Tale provider gestisce connessioni, converte query di entità in query specifiche dell'origine e restituisce un lettore dati utilizzato da Object Services per materializzare i dati dell'entità in oggetti. Quando la materializzazione degli oggetti non è richiesta, il provider EntityClient può essere utilizzato anche come un provider di dati ADO.NET standard consentendo alle applicazioni di eseguire query Entity SQL e di utilizzare il lettore dati di sola lettura restituito. Per ulteriori informazioni, vedere Provider EntityClient per Entity Framework.
Nel diagramma seguente viene illustrata l'architettura di Entity Framework per l'accesso ai dati:
Entity Framework genera una classe derivata da ObjectContext che rappresenta il contenitore di entità nel modello concettuale. Questo contesto dell'oggetto fornisce le funzionalità di registrazione delle modifiche e di gestione di identità, concorrenza e relazioni. Questa classe espone inoltre un metodo SaveChanges che scrive inserimenti, aggiornamenti ed eliminazioni nell'origine dati. Analogamente alle query, queste modifiche vengono eseguite da comandi generati automaticamente dal sistema o da stored procedure specificate dallo sviluppatore. Per ulteriori informazioni, vedere Aggiunta, modifica ed eliminazione di oggetti (Entity Framework).
Strumenti di Entity Data Model
Insieme al runtime di Entity Framework, .NET Framework 3.5 SP1 include il generatore EDM (EdmGen.exe). L'utilità del prompt dei comandi esegue una connessione a un'origine dati e genera un modello EDM basato su un mapping uno-a-uno tra entità e tabelle. Utilizza inoltre un file del modello concettuale con estensione csdl per generare un file del livello di oggetti contenente classi che rappresentano tipi di entità e ObjectContext. Per ulteriori informazioni, vedere Generatore EDM (EdmGen.exe).
Visual Studio 2008 include strumenti avanzati di supporto per la generazione e la gestione di un modello EDM in un'applicazione Visual Studio. Entity Data Model Designer supporta la creazione di scenari di mapping avanzati, ad esempio l'ereditarietà tabella per tipo e tabella per gerarchia e le entità suddivise che eseguono il mapping a più tabelle. Per ulteriori informazioni, vedere Cenni preliminari su ADO.NET Entity Data Model Designer.
Ulteriori informazioni
Per ulteriori informazioni su Entity Framework, fare clic sui collegamenti seguenti.
- Guida introduttiva (Entity Framework)
Contiene informazioni su come diventare rapidamente operativi mediante la Guida rapida (Entity Framework), in cui viene illustrata la creazione di una semplice applicazione Entity Framework.
- Guida rapida (Entity Framework)
Viene illustrato come utilizzare gli strumenti di Entity Data Model con Visual Studio 2008 per creare rapidamente la prima applicazione Entity Framework.
- Scenari applicativi (Entity Framework)
Include collegamenti basati sull'attività ad argomenti in cui vengono descritti scenari dell'applicazione specifici, ad esempio la scrittura di query, l'associazione di oggetti a controlli dei dati o l'implementazione della logica di business.
- Funzionalità di Entity Framework
Fornisce informazioni più dettagliate sulle funzionalità che compongono Entity Framework e collegamenti agli argomenti in cui ne viene descritto il funzionamento.
- Terminologia relativa a Entity Framework
Definisce molti dei termini introdotti dal modello EDM e Entity Framework e utilizzati nella documentazione di Entity Framework.
- Risorse di Entity Framework
Fornisce collegamenti ad argomenti concettuali e collegamenti a risorse ed argomenti esterni per la compilazione di applicazioni Entity Framework.