Condividi tramite


Panoramica di Entity Framework

Entity Framework è un set di tecnologie in ADO.NET che supportano lo sviluppo di applicazioni software orientate ai dati. Architetti e sviluppatori di applicazioni orientate ai dati hanno lottato con la necessità di raggiungere due obiettivi molto diversi. Devono modellare le entità, le relazioni e la logica dei problemi aziendali che stanno risolvendo e devono anche lavorare con i motori di dati usati per archiviare e recuperare i dati. I dati possono estendersi su più sistemi di archiviazione, ognuno con i propri protocolli; anche le applicazioni che funzionano con un singolo sistema di archiviazione devono bilanciare i requisiti del sistema di archiviazione rispetto ai requisiti di scrittura di codice dell'applicazione efficiente e gestibile.

Entity Framework consente agli sviluppatori di lavorare con i dati sotto forma di oggetti e proprietà specifici del dominio, ad esempio clienti e indirizzi dei clienti, senza doversi preoccupare delle tabelle e delle colonne di database sottostanti in cui vengono archiviati questi dati. Con Entity Framework, gli sviluppatori possono lavorare a un livello superiore di astrazione quando gestiscono i dati e possono creare e gestire applicazioni orientate ai dati con meno codice rispetto alle applicazioni tradizionali. Poiché Entity Framework è un componente di .NET Framework, le applicazioni Entity Framework possono essere eseguite in qualsiasi computer in cui è installato .NET Framework a partire dalla versione 3.5 SP1.

Dare vita ai modelli

Un approccio di progettazione comune e di lunga durata quando si compila un'applicazione o un servizio è la divisione dell'applicazione o del servizio in tre parti: un modello di dominio, un modello logico e un modello fisico. Il modello di dominio definisce le entità e le relazioni nel sistema che viene modellato. Il modello logico per un database relazionale normalizza le entità e le relazioni in tabelle con vincoli di chiave esterna. Il modello fisico risolve le funzionalità di un determinato motore di dati specificando i dettagli di archiviazione, ad esempio il partizionamento e l'indicizzazione.

Il modello fisico viene perfezionato dagli amministratori di database per migliorare le prestazioni, ma i programmatori che scrivono codice dell'applicazione si limitano principalmente a lavorare con il modello logico scrivendo query SQL e chiamando stored procedure. I modelli di dominio vengono in genere usati come strumento per acquisire e comunicare i requisiti di un'applicazione, spesso come diagrammi inert visualizzati e discussi nelle prime fasi di un progetto e quindi abbandonati. Molti team di sviluppo ignorano la creazione di un modello concettuale e iniziano specificando tabelle, colonne e chiavi in un database relazionale.

Entity Framework offre vita ai modelli consentendo agli sviluppatori di eseguire query su entità e relazioni nel modello di dominio (denominato modello concettuale in Entity Framework) mentre si affidano a Entity Framework per convertire tali operazioni in comandi specifici dell'origine dati. In questo modo le applicazioni vengono liberate da dipendenze hard-coded su una determinata sorgente di dati.

Quando si usa Code First, il modello concettuale viene mappato al modello di archiviazione nel codice. Entity Framework può dedurre il modello concettuale in base ai tipi di oggetto e alle configurazioni aggiuntive definite dall'utente. I metadati di mapping vengono generati durante l'esecuzione in base a una combinazione di come sono stati definiti i tipi di dominio e informazioni di configurazione aggiuntive fornite nel codice. Entity Framework genera il database secondo necessità basandosi sui metadati. Per altre informazioni, vedere Creazione di un modello.

Quando si lavora con Entity Data Model Tools, il modello concettuale, il modello di archiviazione e i mapping tra i due sono espressi in schemi basati su XML e definiti nei file con estensioni dei nomi corrispondenti:

  • Il linguaggio CSDL (Conceptual Schema Definition Language) definisce il modello concettuale. CSDL è l'implementazione dell'Entity Data Model nel contesto di Entity Framework. L'estensione del file è .csdl.

  • Store Schema Definition Language (SSDL) definisce il modello di archiviazione, detto anche modello logico. L'estensione del file è .ssdl.

  • Il linguaggio MSL (Mapping Specification Language) definisce i mapping tra i modelli di archiviazione e concettuali. L'estensione del file è msl.

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 usare un modello concettuale coerente in varie origini dati.

Entity Framework usa questi file di modello e mapping per creare, leggere, aggiornare ed eliminare operazioni su entità e relazioni nel modello concettuale per operazioni equivalenti nell'origine dati. Entity Framework supporta anche la mappatura delle entità nel modello concettuale alle stored procedure della fonte dati. Per altre informazioni, vedere Specifiche CSDL, SSDL e MSL.

Associare gli oggetti ai dati

La programmazione orientata agli oggetti rappresenta una sfida per l'interazione con i sistemi di archiviazione dei dati. Anche se l'organizzazione delle classi rispecchia frequentemente l'organizzazione di tabelle di database relazionali, l'adattamento non è perfetto. Più tabelle normalizzate corrispondono spesso a una singola classe e le relazioni tra le classi vengono spesso rappresentate in modo diverso rispetto alle relazioni tra tabelle. Ad esempio, per rappresentare il cliente per un ordine di vendita, una Order classe potrebbe utilizzare una proprietà contenente un riferimento a un'istanza di una Customer classe, mentre una Order riga di tabella in un database contiene una colonna chiave esterna (o un set di colonne) con un valore che corrisponde a un valore di chiave primaria nella Customer tabella. Una Customer classe potrebbe avere una proprietà denominata Orders che contiene una raccolta di istanze della Order classe , mentre la Customer tabella in un database non ha una colonna paragonabile. Entity Framework offre agli sviluppatori la flessibilità necessaria per rappresentare le relazioni in questo modo o per modellare più strettamente le relazioni così come sono rappresentate nel database.

Le soluzioni esistenti hanno cercato di colmare questo divario, spesso definito "mismatch di impedenza", mappando solo le classi e le proprietà orientate agli oggetti su tabelle e colonne relazionali. Anziché adottare questo approccio tradizionale, Entity Framework esegue il mapping di tabelle relazionali, colonne e vincoli di chiave esterna nei modelli logici a entità e relazioni nei modelli concettuali. Ciò consente una maggiore flessibilità sia nella definizione degli oggetti che nell'ottimizzazione del modello logico. Gli strumenti entity data model generano classi di dati estendibili in base al modello concettuale. Queste classi sono classi parziali che possono essere estese con membri aggiuntivi aggiunti dallo sviluppatore. Per impostazione predefinita, le classi generate per un particolare modello concettuale derivano da classi di base che forniscono servizi per materializzare le entità come oggetti e per tenere traccia e salvare le modifiche. Gli sviluppatori possono usare queste classi per lavorare con le entità e le relazioni come oggetti correlati dalle associazioni. Gli sviluppatori possono anche personalizzare le classi generate per un modello concettuale. Per altre informazioni, vedere Utilizzo di oggetti.

Accedere e modificare i dati delle entità

Oltre a un'altra soluzione di mapping relazionale a oggetti, Entity Framework consiste fondamentalmente nell'consentire alle applicazioni di accedere e modificare i dati rappresentati come entità e relazioni nel modello concettuale. Entity Framework usa le informazioni nei file di modello e mapping per convertire le query sugli oggetti rispetto ai tipi di entità rappresentati nel modello concettuale in query specifiche dell'origine dati. I risultati delle query vengono materializzati in oggetti gestiti da Entity Framework. Entity Framework offre i modi seguenti per eseguire query su un modello concettuale e restituire oggetti:

  • LINQ to Entities Fornisce Language-Integrated supporto di query (LINQ) per l'esecuzione di query sui tipi di entità definiti in un modello concettuale. Per altre informazioni, vedere LINQ to Entities.

  • Entity SQL. Dialetto indipendente dall'archiviazione di SQL che funziona direttamente con le entità nel modello concettuale e che supporta i concetti di Entity Data Model. Entity SQL viene usato sia con query di oggetto che query eseguite usando il provider EntityClient. Per altre informazioni, vedere Panoramica di Entity SQL.

L'Entity Framework include il provider di dati EntityClient. Questo provider gestisce le connessioni, converte le query di entità in query specifiche dell'origine dati e restituisce un lettore di dati usato da Entity Framework per materializzare i dati delle entità in oggetti. Quando la materializzazione degli oggetti non è necessaria, il provider EntityClient può essere usato anche come un provider di dati standard ADO.NET consentendo alle applicazioni di eseguire query Entity SQL e utilizzare il lettore di dati di sola lettura restituito. Per ulteriori informazioni, vedere Provider EntityClient per Entity Framework.

Il diagramma seguente illustra l'architettura di Entity Framework per l'accesso ai dati:

Diagramma dell'architettura di Entity Framework

Entity Data Model Tools può generare una classe derivata da System.Data.Objects.ObjectContext o System.Data.Entity.DbContext che rappresenta il contenitore di entità nel modello concettuale. Questo contesto di oggetto offre le funzionalità per tenere traccia delle modifiche e gestire identità, concorrenza e relazioni. Questa classe espone anche un SaveChanges metodo che scrive inserimenti, aggiornamenti ed eliminazioni nell'origine dati. Analogamente alle query, queste modifiche vengono apportate dai comandi generati automaticamente dal sistema o dalle stored procedure specificate dallo sviluppatore.

Provider di dati

Il EntityClient provider estende il modello di provider ADO.NET accedendo ai dati in termini di entità concettuali e relazioni. Esegue query che usano Entity SQL. Entity SQL fornisce il linguaggio di query sottostante che consente di EntityClient comunicare con il database. Per ulteriori informazioni, vedere Provider EntityClient per Entity Framework.

L'Entity Framework include un provider di dati SqlClient aggiornato che supporta gli alberi dei comandi canonici. Per altre informazioni, vedere SqlClient per Entity Framework.

Strumenti del modello di dati di entità

Insieme al runtime di Entity Framework, Visual Studio include gli strumenti di mapping e modellazione. Per altre informazioni, vedere Modellazione e mapping.

Ulteriori informazioni

Per altre informazioni su Entity Framework, vedere:

Introduzione : fornisce informazioni su come iniziare a usare rapidamente l'avvio rapido, che illustra come creare una semplice applicazione Entity Framework.

Terminologia di Entity Framework : definisce molti dei termini introdotti dal modello di dati di entità e da Entity Framework e usati nella documentazione di Entity Framework.

Risorse di Entity Framework : fornisce collegamenti ad argomenti concettuali e collegamenti ad argomenti esterni e risorse per la compilazione di applicazioni Entity Framework.

Vedere anche