Condividi tramite


Panoramica su Entity Framework

Entity Framework è un set 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. Con Entity Framework , gli sviluppatori possono operare 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 su qualsiasi computer in cui è installato .NET Framework 3.5 SP1 o versione successiva.

Nelle sezioni seguenti del presente argomento sono fornite ulteriori informazioni su Entity Framework :

  • Giving Life to Models

  • Mapping Objects to Data

  • Accessing and Changing Entity Data

  • Data Providers

  • Entity Data Model Tools

  • Learning More

Realizzazione dei modelli

Un approccio di progettazione comune e consolidato quando si compila un'applicazione o un servizio consiste nel dividere l'applicazione o il 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 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 di dominio vengono in genere utilizzati come 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 in quanto consente agli sviluppatori di eseguire query su entità e relazioni del modello di dominio (denominato modello concettuale in Entity Framework ) 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 i mapping tra i due vengono espressi in schemi basati su XML e definiti in file con estensioni corrispondenti:

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

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

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

Il modello di archiviazione e i mapping possono essere modificati in base alle esigenze senza che sia necessario modificare il modello concettuale, le classi di dati o il codice dell'applicazione. Poiché i modelli di archiviazione sono specifici del provider, è possibile utilizzare un modello concettuale coerente in varie origini dati.

Questi file del modello e di mapping vengono utilizzati da Entity Framework per trasformare operazioni di creazione, lettura, aggiornamento ed eliminazione di entità e relazioni del modello concettuale in operazioni equivalenti nell'origine dati. Entity Framework supporta anche il mapping di entità del modello concettuale a stored procedure dell'origine dati. Per ulteriori informazioni, vedere Specifiche CSDL, SSDL e MSL.

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 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 spesso rappresentate in modo diverso rispetto alle relazioni tra tabelle. Per rappresentare il cliente per un determinato ordine, ad esempio, una classe Order potrebbe utilizzare una proprietà contenente un riferimento a un'istanza di una classe Customer, mentre una riga della tabella Order in un database contiene una colonna o un set 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 una raccolta di istanze della classe Order, mentre la tabella Customer in un database non include colonne confrontabili. Entity Framework offre agli sviluppatori la flessibilità per rappresentare relazioni in questo modo o per modellare con maggiore precisione le relazioni come vengono rappresentate nel database. Per ulteriori informazioni, vedere Definizione e gestione delle relazioni (Entity Framework).

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. Per impostazione predefinita, le classi generate per un particolare modello concettuale derivano da classi di base che forniscono servizi per la materializzazione di entità come oggetti e per il rilevamento e il salvataggio delle modifiche. Queste classi possono essere utilizzate dagli sviluppatori per gestire le entità e le relazioni come oggetti correlati da associazioni. Gli sviluppatori possono inoltre personalizzare le classi generate per un modello concettuale. Per ulteriori informazioni, vedere Utilizzo di oggetti (Entity Framework) e How to: Customize Object-Layer Code Generation.

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. Entity Framework utilizza le informazioni nei file del modello e di mapping 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 Entity Framework . In Entity Framework sono disponibili i seguenti metodi per eseguire query su un modello concettuale e restituire oggetti:

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

  • Entity SQL . Sottolinguaggio SQL indipendente dall'archiviazione che interagisce direttamente con le entità del modello concettuale e supporta i concetti di Entity Data Model . 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. Questi metodi 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 dati e restituisce un lettore dati utilizzato da Entity Framework per materializzare i dati dell'entità in oggetti. Quando la materializzazione degli oggetti non è richiesta, il provider EntityClient può essere utilizzato anche come 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:

Diagramma dell'architettura di Entity Framework

Tramite gli strumenti di Entity Data Model è possibile generare una classe derivata da ObjectContext che rappresenta il contenitore di entità definito 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 Creazione, aggiunta, modifica ed eliminazione di oggetti (Entity Framework).

Provider di dati

Il provider EntityClient estende il modello del provider ADO.NET tramite l'accesso ai dati in termini di relazioni ed entità concettuali. Esegue query che utilizzano Entity SQL . Entity SQL fornisce il linguaggio di query sottostante che consente la comunicazione di EntityClient con il database. Per ulteriori informazioni, vedere Provider EntityClient per Entity Framework.

Entity Framework include un provider di dati SqlClient aggiornato che supporta le strutture ad albero dei comandi canoniche. Per ulteriori informazioni, vedere Provider di dati .NET Framework per SQL Server (SqlClient) per Entity Framework.

Strumenti di Entity Data Model

Insieme al runtime di Entity Framework , .NET Framework versione 4 include il generatore EDM (EdmGen.exe). Questa utilità del prompt dei comandi consente di connettersi a un'origine dati e generare file di modello e di mapping 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 2010 include strumenti avanzati di supporto per la generazione e la gestione di file di modello e di mapping 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 ADO.NET Entity Data Model Designer.

Ulteriori informazioni

Per ulteriori informazioni su Entity Framework , fare clic sui collegamenti seguenti.

  • Guida rapida (Entity Framework)
    Viene illustrato come utilizzare gli strumenti di Entity Data Model con per creare rapidamente la prima applicazione 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 .

Vedere anche

Concetti

ADO.NET Entity Framework