Rilevamento delle modifiche nelle entità POCO (Entity Framework)

Il rilevamento delle modifiche nelle entità POCO (Plain-Old CLR Object) può essere eseguito in due modi, ovvero tramite un oggetto proxy di rilevamento delle modifiche o tramite uno snapshot.

Rilevamento delle modifiche con i proxy

Se per le entità POCO è abilitata la creazione di oggetti proxy di rilevamento delle modifiche, le modifiche apportate all'oggetto grafico vengono rilevate automaticamente da Entity Framework non appena si verificano. Per ulteriori informazioni, vedere Requisiti per la creazione di proxy POCO (Entity Framework) e Risoluzione di identità, gestione dello stato e rilevamento delle modifiche (Entity Framework). Se non è possibile soddisfare i requisiti aggiuntivi nelle classi POCO o se non si desidera la materializzazione di questi oggetti proxy, è possibile disabilitare la generazione della classe proxy. Per ulteriori informazioni, vedere Utilizzo di entità POCO (Entity Framework).

Rilevamento delle modifiche utilizzando uno snapshot

Se la creazione di oggetti proxy viene disabilitata, le modifiche apportate all'oggetto grafico non vengono rilevate automaticamente da Entity Framework non appena si verificano. È necessario invece utilizzare il metodo DetectChanges per la segnalazione delle modifiche.

Quando un oggetto è connesso al contesto, uno snapshot viene creato dai relativi valori della proprietà. Quando il metodo DetectChanges viene chiamato, l'oggetto grafico connesso viene sincronizzato con l'oggetto ObjectStateManager. Per informazioni sulla connessione di oggetti, vedere Connessione e disconnessione di oggetti (Entity Framework). Il metodo DetectChanges consente di sincronizzare l'oggetto grafico con il gestore degli stati eseguendo le azioni seguenti:

  1. Connette nuovi oggetti nel grafico al contesto dell'oggetto. Tale situazione può verificarsi se si esegue una query per un oggetto principale e si crea un'associazione con un nuovo oggetto dipendente.

  2. Aggiornando lo stato di oggetti in base al confronto dei valori della proprietà correnti con lo snapshot di valori originali (se lo snapshot è già stato creato).

Per ulteriori informazioni, vedere Procedura: rilevare modifiche nelle entità POCO.

Dd456848.note(it-it,VS.100).gifNota:
Se in un'entità POCO è inclusa una proprietà del tipo complesso, le modifiche ai membri dell'istanza del tipo complesso verranno rilevate tramite il metodo basato sullo snapshot, anche se l'entità dispone di un proxy di rilevamento delle modifiche.Tuttavia, se a una nuova istanza del tipo complesso viene assegnata una proprietà, la modifica della proprietà viene rilevata con la stessa modalità di altre proprietà.

Quando gli oggetti e l'oggetto ObjectStateManager non sono sincronizzati, altre operazioni in cui viene utilizzato l'oggetto ObjectStateManager, ad esempio l'aggiunta o l'eliminazione di oggetti, la chiamata al metodo Refresh o anche l'esecuzione di query con un valore MergeOption di PreserveChanges possono generare risultati imprevisti.

Data l'importanza di mantenere l'oggetto ObjectStateManager sincronizzato con qualsiasi modifica ai valori di entità POCO connesse, per impostazione predefinita il metodo SaveChanges chiama innanzitutto il metodo DetectChanges. Se sono state apportate modifiche al grafico e si intende utilizzare uno qualsiasi dei metodi seguenti, prima di chiamare il metodo SaveChanges è consigliabile chiamare il metodo DetectChanges:

Vedere anche

Concetti

Utilizzo di entità POCO (Entity Framework)