Condividi tramite


Connessione di oggetti (Entity Framework)

Quando una query viene eseguita in un contesto dell'oggetto in Entity Framework, gli oggetti restituiti vengono automaticamente connessi al contesto dell'oggetto. È possibile inoltre connettere a un contesto dell'oggetto gli oggetti ottenuti da un'origine diversa da una query. È possibile connettere gli oggetti che in precedenza sono stati disconnessi, gli oggetti restituiti da una query NoTracking o gli oggetti ottenuti all'esterno del contesto dell'oggetto. È inoltre possibile connettere gli oggetti archiviati nello stato di visualizzazione di un'applicazione ASP.NET o restituiti da una chiamata al metodo remota o da un servizio Web.

Utilizzare uno dei metodi seguenti per connettere l'oggetto a un contesto dell'oggetto:

  • Chiamare AddObject su ObjectContext per aggiungere l'oggetto al contesto dell'oggetto. Eseguire questa operazione quando si tratta di un nuovo oggetto non ancora presente nell'origine dati.

  • Chiamare Attach su ObjectContext per connettere l'oggetto al contesto dell'oggetto. Eseguire questa operazione quando l'oggetto è già presente nell'origine dati ma non è attualmente connesso al contesto. Per ulteriori informazioni, vedere Procedura: connettere oggetti correlati (Entity Framework).

  • Chiamare AttachTo su ObjectContext per connettere l'oggetto a un set di entità specifico nel contesto dell'oggetto. Eseguire questa operazione anche se l'oggetto ha un valore null (Nothing in Visual Basic) EntityKey.

  • Chiamare ApplyPropertyChanges su ObjectContext. Eseguire questa operazione quando l'oggetto è già presente nell'origine dati e per l'oggetto disconnesso sono disponibili aggiornamenti delle proprietà che si desidera rendere persistenti. Se si connette solo l'oggetto, le modifiche alle proprietà vengono perse. Per ulteriori informazioni, vedere Procedura: applicare le modifiche apportate a un oggetto disconnesso (Entity Framework).

Le considerazioni seguenti riguardano la connessione di oggetti al contesto dell'oggetto:

  • Se l'oggetto che viene connesso ha oggetti correlati, anche tali oggetti vengono connessi al contesto dell'oggetto.

  • Per utilizzare Attach per connettere un oggetto, l'oggetto deve implementare IEntityWithKey e deve disporre di una chiave valida.

  • Gli oggetti vengono connessi al contesto dell'oggetto in un stato Unchanged.

  • Se l'oggetto connesso non è presente nell'origine dati, non viene aggiunto durante l'esecuzione di SaveChanges. In questo caso, quando vengono apportate modifiche alle proprietà, si verifica un'eccezione nel server durante l'esecuzione di SaveChanges. Per aggiungere un oggetto, utilizzare AddObject anziché Attach.

  • Se l'oggetto che viene connesso è correlato ad altri oggetti, è necessario definire in modo esplicito le relazioni in uno dei modi seguenti:

    • Connettere entrambi gli oggetti al contesto dell'oggetto, quindi chiamare Attach su EntityCollection o su EntityReference per definire la relazione.

    • Se nessuno dei due oggetti è connesso, chiamare Add su EntityCollection e specificare l'oggetto correlato oppure impostare la proprietà Value di EntityReference sull'oggetto correlato. Connettere quindi la radice dell'oggetto grafico al contesto dell'oggetto. È possibile utilizzare questo metodo per costruire un oggetto grafico dagli oggetti disconnessi, quindi connettere il grafico al contesto dell'oggetto.

    Questi metodi vengono utilizzati quando vengono connessi oggetti correlati serializzati utilizzando la serializzazione XML. Per ulteriori informazioni, vedere Procedura: connettere oggetti correlati (Entity Framework).

  • Se i valori delle proprietà dell'oggetto che viene connesso sono stati aggiornati, utilizzare ApplyPropertyChanges per applicare gli aggiornamenti all'oggetto esistente. Per ulteriori informazioni, vedere Procedura: applicare le modifiche apportate a un oggetto disconnesso (Entity Framework).

  • L'oggetto passato al metodo Attach deve avere un valore EntityKey valido. Se l'oggetto non ha un valore EntityKey valido, utilizzare il metodo AttachTo per specificare il nome del set di entità.

  • Se un oggetto da connettere presenta un EntityKey identico a quello di un altro ogetto già presente nel contesto dell'oggetto, si verifica un'eccezione InvalidOperationException. Questo errore non si verifica quando nel contesto dell'oggetto è già presente la stessa istanza dell'oggetto. È possibile chiamare Attach più volte sulla stessa istanza dell'oggetto, a condizione che lo stato dell'oggetto sia Unchanged.

  • Utilizzare il metodo AttachTo per connettere gli oggetti a un set di entità specifico. Per ulteriori informazioni, vedere Aggiunta, modifica ed eliminazione di oggetti (Entity Framework).

  • Quando per l'oggetto che viene connesso utilizzando il metodo AttachTo è già definita la chiave di entità, si verifica un evento InvalidOperationException se il valore del parametro entitySetName non corrisponde al nome del set di entità nella chiave esistente.

Vedere anche

Concetti

Disconnessione di oggetti (Entity Framework)
Servizi Web e Entity Data Model (scenari applicativi)

Altre risorse

Gestione del contesto dell'oggetto (Entity Framework)