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

Gli oggetti presenti in un contesto dell'oggetto sono istanze dei tipi di entità che rappresentano i dati nell'origine dati. È possibile modificare, creare ed eliminare gli oggetti in un contesto dell'oggetto. Entity Framework consente di rilevare le modifiche apportate a tali oggetti. Quando viene chiamato il metodo SaveChanges, in Entity Framework vengono generati e avviati i comandi che eseguono le istruzioni INSERT, UPDATE o DELETE equivalenti sull'origine dati. Per ulteriori informazioni, vedere Salvataggio delle modifiche e gestione della concorrenza (Entity Framework).

Mapping delle funzioni di inserimento, aggiornamento ed eliminazione a stored procedure

Entity Framework consente di mappare le operazioni di inserimento, aggiornamento ed eliminazione di un tipo di entità a stored procedure. Se si intende mappare stored procedure alle entità, si consiglia di eseguire il mapping di tutte e tre le operazioni. Se ad esempio si esegue il mapping di un tipo di entità alle stored procedure di inserimento e aggiornamento, ma non a quella di eliminazione, e successivamente si prova a eliminare un oggetto del tipo mappato, l'operazione di eliminazione avrà esito negativo in fase di esecuzione con UpdateException. Per ulteriori informazioni, vedere How to: Map Modification Functions to Stored Procedures e Walkthrough: Mapping an Entity to Stored Procedures.

Creazione e aggiunta di oggetti

Quando si desidera inserire dati nell'origine dati, è necessario creare un'istanza di un tipo di entità e aggiungere l'oggetto a un contesto dell'oggetto. Prima che sia possibile salvare un nuovo oggetto nell'origine dati, è necessario impostare tutte le proprietà che non supportano valori null. In caso di utilizzo di classi generate tramite Entity Framework , si consiglia di utilizzare il metodo statico CreateNomeOggetto del tipo di entità per creare una nuova istanza di quest'ultimo. Gli strumenti Entity Data Model prevedono l'inclusione di tale metodo in ogni classe quando vengono generati i tipi di entità. Il metodo Create in questione viene utilizzato per creare un'istanza di un oggetto e impostare tutte le proprietà della classe che non possono essere null. Il metodo include un parametro per ogni proprietà per cui sia stato applicato l'attributo Nullable="false" nel file CSDL. Per ulteriori informazioni, vedere Procedura: creare un oggetto utilizzando il metodo di creazione statico (Entity Framework).

In caso di utilizzo di entità POCO (Plain-Old CLR Object), utilizzare il metodo CreateObject anziché l'operatore new per creare un nuovo oggetto. Il metodo CreateObject esegue il wrapping della nuova istanza POCO nell'oggetto proxy adeguato. Per ulteriori informazioni, vedere Utilizzo di entità POCO (Entity Framework).

È possibile aggiungere nuovi oggetti a un contesto dell'oggetto utilizzando uno dei metodi seguenti:

Le considerazioni seguenti riguardano l'aggiunta di nuovi oggetti:

  • Prima della chiamata a SaveChanges, Entity Framework genera un valore di chiave temporaneo per ogni nuovo oggetto. Dopo la chiamata a SaveChanges, il valore di chiave viene sostituito dal valore Identity assegnato dall'origine dati quando viene inserita una nuova riga.

  • Se il valore di chiave di un'entità non viene generato dall'origine dati, è necessario assegnare un valore univoco. Se due oggetti hanno lo stesso valore di chiave specificato dall'utente, quando viene chiamato SaveChanges viene generata un'eccezione InvalidOperationException. In questo caso, assegnare valori univoci e riprovare a eseguire l'operazione.

Eliminazione di oggetti

Se si chiama il metodo DeleteObject su ObjectSet o il metodo DeleteObject su ObjectContext, l'oggetto specificato viene contrassegnato per l'eliminazione. La riga viene eliminata dall'origine dati solo dopo la chiamata al metodo SaveChanges. Il comportamento dell'eliminazione di oggetti varia in Entity Framework a seconda del tipo di relazione di appartenenza dell'oggetto.

In una relazione di identificazione, in cui una chiave primaria dell'entità principale fa parte della chiave primaria dell'entità dipendente, l'eliminazione di un oggetto consente di eliminare anche gli oggetti correlati. Non possono essere presenti oggetti dipendenti senza una relazione definita con l'oggetto padre. L'eliminazione dell'oggetto padre comporta anche l'eliminazione di tutti gli oggetti figlio. Questo risultato corrisponde all'abilitazione dell'attributo <OnDelete Action="Cascade" /> nell'associazione per la relazione.

In una relazione di non identificazione rappresentata come associazione di chiavi esterne, Entity Framework imposta le proprietà di chiave esterna nullable degli oggetti dipendenti su null quando l'oggetto principale viene eliminato.

Per ulteriori informazioni, vedere Elemento OnDelete (CSDL) e Definizione e gestione delle relazioni (Entity Framework).

Modifica di oggetti

Entity Framework consente di rilevare le modifiche apportate agli oggetti collegati a un oggetto ObjectContext. Gli strumenti di Entity Data Model generano una coppia di metodi parziali denominati OnProprietàChanging e OnProprietàChanged. Questi metodi vengono chiamati nel metodo per l'impostazione della proprietà. Estenderli nelle classi parziali per inserire la logica di business personalizzata durante le modifiche alle proprietà. Per ulteriori informazioni, vedere Procedura: eseguire la logica di business quando vengono modificate le proprietà scalari (Entity Framework). Per informazioni sull'utilizzo delle entità POCO, vedere Rilevamento delle modifiche nelle entità POCO (Entity Framework).

Le considerazioni seguenti riguardano la modifica di oggetti:

  • Quando si modifica una proprietà scalare o complessa di un oggetto complesso, lo stato dell'oggetto entità di livello superiore viene impostato su Modified. Nelle entità POCO che non soddisfano i requisiti per la generazione proxy illustrati in Requisiti per la creazione di proxy POCO (Entity Framework), lo stato delle proprietà modificate viene impostato su Modified quando si chiama il metodo DetectChanges.

  • Le modifiche non vengono rilevate quando lo stato degli oggetti è Detached. Lo stato degli oggetti è tale quando vengono restituiti da una query che utilizza l'opzione di unione NoTracking o dopo la disconnessione da un ObjectContext mediante la chiamata al metodo Detach.

  • Quando si modifica un'associazione di chiavi esterne, lo stato dell'oggetto dipendente viene modificato in Modified. Quando si modifica un'associazione indipendente, lo stato dell'oggetto dipendente non cambia.

Per ulteriori informazioni sul rilevamento di modifiche nelle entità POCO, vedere Rilevamento delle modifiche nelle entità POCO (Entity Framework).

Aggiunta di oggetti a un elemento EntitySet specifico

In alcune situazioni un tipo di entità può appartenere a più set di entità. Si consideri, ad esempio, una situazione in cui un database include due tabelle con schemi identici. Questo potrebbe verificarsi si desidera partizionare i dati per migliorare l'efficacia del processo di backup. Si potrebbe ad esempio disporre di dati dei clienti partizionati tra le tabelle Customer e CustomerArchive, dove la tabella CustomerArchive ha lo stesso schema della tabella Customer, ma viene utilizzata per i clienti che non hanno effettuato ordini per più dei sei mesi. È possibile eseguire il backup di Customer ogni notte, mentre quello di CustomerArchive solo ogni settimana. Dal punto di vista del mapping, Customer e CustomerArchive devono appartenere a set di entità diversi. Entity Framework supporta questo scenario consentendo la presenza di un tipo di entità in uno o più set di entità. Per ulteriori informazioni, vedere Elemento EntitySet (CSDL).

Quando un tipo di entità è presente in più set di entità, Entity Framework consente di aggiungere nuove istanze del tipo a un set di entità specifico. A partire da .NET Framework versione 4, una classe ObjectContext generata per un modello specifico dispone di proprietà di tipo ObjectSet che rappresentano i set di entità del modello. Utilizzare il metodo AddObject per aggiungere nuovi oggetti al contesto dell'oggetto. Per ulteriori informazioni, vedere Utilizzo di ObjectSet (Entity Framework). In .NET Framework versione 3.5 SP1 è necessario specificare il valore di entitySetName quando si chiama il metodo AddObject per aggiungere l'oggetto al contesto dell'oggetto.

Contenuto della sezione

Procedura: aggiungere, modificare ed eliminare oggetti (Entity Framework)

Procedura: creare un oggetto utilizzando il metodo di creazione statico (Entity Framework)

Vedere anche

Attività

Procedura: definire un modello con più set di entità per tipo (Entity Framework)
Procedura: aggiungere, modificare ed eliminare oggetti (Entity Framework)

Concetti

Definizione e gestione delle relazioni (Entity Framework)
Utilizzo di entità POCO (Entity Framework)
Utilizzo di ObjectSet (Entity Framework)
Utilizzo di ObjectSet (Entity Framework)
Elemento OnDelete (CSDL)