Utilizzo di oggetti (Entity Framework)

Entity Framework consente di eseguire query sui dati e di inserire, aggiornare ed eliminare dati, espressi come oggetti CLR (Common Language Runtime) tipizzati che sono istanze dei tipi di entità. I tipi di entità rappresentano le entità definite nel modello concettuale. Entity Framework esegue il mapping di entità e relazioni definite in un modello concettuale a un'origine dati. In Entity Framework sono disponibili funzionalità che consentono di materializzare i dati restituiti dall'origine dati come oggetti, rilevare le modifiche apportate agli oggetti, gestire la concorrenza, propagare le modifiche agli oggetti nell'origine dati e associare oggetti a controlli. È possibile utilizzare LINQ to Entities, Linguaggio Entity SQL o Metodi del generatore di query (Entity Framework) per eseguire query sul modello concettuale. Per ulteriori informazioni, vedere Esecuzione di query su un modello concettuale (Entity Framework).

La classe ObjectContext è la classe primaria per l'interazione con oggetti entità. Un'istanza della classe ObjectContext incapsula una connessione al database, metadati che descrivono il modello e un oggetto ObjectStateManager che rileva gli oggetti durante le operazioni di creazione, aggiornamento ed eliminazione. Per ulteriori informazioni, vedere Risoluzione di identità, gestione dello stato e rilevamento delle modifiche (Entity Framework).

In Entity Framework sono disponibili strumenti che consentono di generare automaticamente un livello oggetti in base al modello concettuale. Tale livello include le definizioni dei tipi di entità e del contesto dell'oggetto. La definizione del contesto dell'oggetto contiene una classe derivata ObjectContext che in genere include un set di proprietà che restituiscono una raccolta di entità del tipo specificato. Per generare il codice del livello oggetti, utilizzare Entity Data Model Designer (Entity Designer) o lo strumento della riga di comando EdmGen.exe. Per ulteriori informazioni, vedere Generated Code Overview.

Tipi di entità

In Entity Framework è possibile utilizzare tipi di entità che derivano da EntityObject, tipi POCO (Plain-Old CLR Objects), tipi proxy POCO e tipi di entità con rilevamento automatico. Nelle sezioni successive vengono fornite informazioni utili per scegliere le opzioni appropriate in base alla natura dell'applicazione.

EntityObject

Per impostazione predefinita, gli strumenti ADO.NET Entity Data Model generano tipi di entità derivate EntityObject. Quando si utilizzano tipi derivati EntityObject, il contesto dell'oggetto gestisce le relazioni tra gli oggetti, rileva le modifiche apportate e supporta il caricamento lazy nel modo più efficiente possibile. I tipi derivati EntityObject, tuttavia, presentano una forte dipendenza da Entity Framework . Se si utilizzano architetture che richiedono il mancato riconoscimento della persistenza, ad esempio lo sviluppo guidato dai test o dal dominio, o si dispone di classi di dominio esistenti, utilizzare i tipi POCO o proxy POCO.

POCO

Entity Framework consente di utilizzare oggetti di dominio esistenti insieme al modello di dati senza apportare alcuna modifica alle classi di dati stesse. Queste classi di dati POCO, note anche come oggetti che non riconoscono la persistenza, supportano la maggior parte degli stessi comportamenti di query, inserimento, aggiornamento ed eliminazione dei tipi di entità generati dagli strumenti di Entity Data Model .

Se si utilizzano tipi POCO, le modifiche apportate all'oggetto grafico non vengono rilevate automaticamente da Entity Framework non appena si verificano. In Entity Framework viene utilizzato il meccanismo dello snapshot per rilevare le modifiche agli oggetti. Per sincronizzare il contesto dell'oggetto con il grafico, chiamare DetectChanges. Per impostazione predefinita, il contesto dell'oggetto chiama questo metodo prima di salvare i dati nell'origine dati. Questo meccanismo utilizza una quantità di memoria superiore rispetto al meccanismo di notifica immediata e potrebbe influire sulle prestazioni, soprattutto se l'applicazione richiede il rilevamento frequente delle modifiche. Per ulteriori informazioni, vedere Rilevamento delle modifiche nelle entità POCO (Entity Framework). Per ottenere il supporto della notifica immediata, abilitare la creazione di oggetti proxy di rilevamento delle modifiche.

Se si desidera utilizzare il caricamento lazy, è necessario abilitare la creazione del proxy di caricamento lazy. Per ulteriori informazioni, vedere la sezione Proxy POCO riportata di seguito.

Proxy POCO

Utilizzare i proxy POCO se si desidera usufruire di un rilevamento delle modifiche molto efficiente e immediato e del caricamento lazy. Quando si utilizzano i proxy, si dispone delle stesse funzionalità dei tipi derivati EntityObject ma ancora di classi di dominio separate da Entity Framework . Per abilitare la creazione del proxy di caricamento lazy e/o di rilevamento delle modifiche immediato, è necessario che le classi POCO soddisfino i requisiti descritti nell'argomento Requisiti per la creazione di proxy POCO (Entity Framework).

I proxy vengono creati durante il runtime ed ereditano dai tipi POCO. Questo significa che il tipo in fase di esecuzione delle entità è diverso dal tipo POCO, il che comporta alcune complicazioni per la serializzazione. Per ulteriori informazioni, vedere Utilizzo di entità POCO (Entity Framework). Tenere presente che la creazione di tipi proxy comporta un sovraccarico rispetto ai tipi POCO.

Entità con rilevamento automatico

I tipi derivati EntityObject , i tipi POCO e i tipi proxy POCO funzionano correttamente nelle applicazioni in cui è possibile connettere oggetti entità al contesto dell'oggetto che gestisce il rilevamento delle modifiche. Tuttavia, quando è necessario trasferire grafici di entità completi a un livello in cui il contesto dell'oggetto non è disponibile, è necessario decidere come rilevare le modifiche e segnalarle nuovamente al contesto dell'oggetto. A partire da .NET Framework versione 4, le entità con rilevamento automatico possono registrare le modifiche a proprietà scalari, complesse e di navigazione. Le entità con rilevamento automatico non dipendono da Entity Framework . Questi tipi di entità possono essere generate dal modello Generatore di entità con rilevamento automatico ADO.NET. Per ulteriori informazioni, vedere Utilizzo delle entità con rilevamento automatico.

Considerazioni sulle prestazioni

Anche le considerazioni sulle prestazioni riportate di seguito possono essere utili per scegliere i tipi di oggetti più appropriati per l'applicazione in uso.

  • Quando si caricano metadati, il costo che comporta l'individuazione dei tipi POCO o proxy è maggiore del costo dell'individuazione dei tipi derivati EntityObject con attributi.

  • La generazione di tipi proxy POCO dinamici comporta un sovraccarico.

  • L'inizializzazione di tipi POCO comporta il sovraccarico minore rispetto ai tipi derivati EntityObject e proxy.

  • Il rilevamento mediante snapshot POCO è più costoso del rilevamento con notifica immediata.

In questa sezione

Oggetti di tipo complesso (Entity Framework)

Definizione e gestione delle relazioni (Entity Framework)

Creazione, aggiunta, modifica ed eliminazione di oggetti (Entity Framework)

Connessione e disconnessione di oggetti (Entity Framework)

Risoluzione di identità, gestione dello stato e rilevamento delle modifiche (Entity Framework)

Gestione di connessioni e transazioni (Entity Framework)

Salvataggio delle modifiche e gestione della concorrenza (Entity Framework)

Associazione di oggetti ai controlli (Entity Framework)

Utilizzo di chiavi di entità (Entity Framework)

Serializzazione di oggetti (Entity Framework)

Utilizzo di ObjectSet (Entity Framework)

Personalizzazione di oggetti (Entity Framework)

Vedere anche

Concetti

Esecuzione di query su un modello concettuale (Entity Framework)
Guida rapida (Entity Framework)