Requisiti per la creazione di proxy POCO (Entity Framework)

Entity Framework supporta le classi POCO (Plain-Old CLR Objects). Se si desidera abilitare il caricamento lazy per le entità POCO e disporre del rilevamento delle modifiche di Entity Framework nelle classi, quando queste vengono apportate, le classi POCO devono soddisfare i requisiti descritti in questo argomento, in modo che Entity Framework sia in grado di creare proxy per le entità POCO in fase di esecuzione. Le classi proxy derivano dai tipi POCO.

Requisiti per la definizione di classe

Entity Framework crea proxy per le entità POCO se le classi soddisfano i requisiti descritti di seguito. Le entità POCO possono disporre di oggetti proxy che supportano il rilevamento delle modifiche o il caricamento lazy. È possibile disporre di proxy di caricamento lazy senza soddisfare i requisiti per il rilevamento delle modifiche, ma se si soddisfano i requisiti proxy di rilevamento delle modifiche, verrà creato anche il proxy di caricamento lazy. È possibile disabilitare il caricamento lazy impostando l'opzione LazyLoadingEnabled su false.

Per ciascuno dei proxy da creare:

  • È necessario dichiarare una classe di dati personalizzata con accesso pubblico.

  • Una classe di dati personalizzata non deve essere sealed (NotInheritable in Visual Basic)

  • Una classe di dati personalizzata non deve essere abstract (MustInherit in Visual Basic).

  • Una classe di dati personalizzata deve disporre di un costruttore public o protected che non dispone di parametri. Utilizzare un costruttore protected senza parametri se si desidera utilizzare il metodo CreateObject per creare un proxy per l'entità POCO. La chiamata al metodo CreateObject non garantisce la creazione del proxy: la classe POCO deve soddisfare gli altri requisiti descritti in questo argomento.

  • La classe non può implementare le interfacce IEntityWithChangeTracker o IEntityWithRelationships perché queste interfacce sono implementate dalle classi proxy.

  • L'opzione ProxyCreationEnabled deve essere impostata su true.

Per i proxy di caricamento lazy:

  • È necessario dichiarare ogni proprietà di navigazione come public, virtual (Overridable in Visual Basic) e non funzione di accesso get sealed (NotOverridable in Visual Basic). La proprietà di navigazione definita nella classe di dati personalizzata deve disporre di una proprietà di navigazione corrispondente nel modello concettuale. Per ulteriori informazioni, vedere Caricamento di entità POCO correlate (Entity Framework).

Per proxy di rilevamento delle modifiche:

  • Ogni proprietà mappata a una proprietà di un tipo di entità nel modello di dati deve disporre di funzioni di accesso get e set non sealed (NotOverridable in Visual Basic), public e virtual (Overridable in Visual Basic).

  • Una proprietà di navigazione che rappresenta l'entità finale "molti" di una relazione deve restituire un tipo che implementa ICollection, in cui T è il tipo di oggetto nell'altra entità finale della relazione.

  • Se si desidera che il tipo di proxy sia creato insieme all'oggetto, quando si crea un nuovo oggetto utilizzare il metodo CreateObject in ObjectContext, invece dell'operatore new.

Se in fase di esecuzione è necessario sapere se un'entità POCO è un proxy, seguire le istruzioni descritte in Procedura: stabilire se un'entità POCO è un proxy (Entity Framework).

Vedere anche

Attività

Procedura dettagliata: serializzare proxy POCO con WCF (Entity Framework)

Concetti

Utilizzo di entità POCO (Entity Framework)
Rilevamento delle modifiche nelle entità POCO (Entity Framework)