Personalizzazione di oggetti (Entity Framework)
In ADO.NET Entity Framework sono disponibili strumenti che consentono di generare automaticamente un livello oggetti in base al file CSDL (Conceptual Schema Definition Language) di Entity Data Model (EDM). Queste classi di dati possono essere personalizzate a diversi livelli, a seconda dei requisiti dell'applicazione. È inoltre possibile modificare le classi di dati personalizzate per utilizzarle con EDM. Questa operazione è utile quando si aggiornano le classi di dati da un'applicazione esistente per utilizzare Entity Framework o quando si desidera un maggiore controllo sulla modalità di creazione delle classi di dati.
Estensione di classi di dati parziali
Ai tipi definiti in EDM non sono associati metodi come alle classi utilizzate nella programmazione orientata a oggetti. Essi contengono invece solo proprietà definite in EDM. È possibile aggiungere funzionalità agli oggetti estendendo le classi di dati parziali generate. Quando le classi di dati vengono generate dagli strumenti di Entity Data Model, vengono implementate in classi parziali. Una classe parziale suddivide la definizione di una classe tra due o più file di origine. Ogni file di origine contiene una sezione della definizione di classe e tutte le sezioni vengono combinate in fase di compilazione dell'applicazione. Per ulteriori informazioni, vedere Partial (Visual Basic) o parziale (Tipo) (Riferimenti per C#).
La presenza di classi parziali consente di estendere tali classi con proprietà e metodi personalizzati in un file di origine separato senza doversi preoccupare di perdere la personalizzazione quando i file generati vengono aggiornati. Per ulteriori informazioni, vedere Procedura: personalizzare oggetti dati generati (Entity Framework).
Logica di business personalizzata
Quando si utilizzano classi di dati generate, è possibile richiamare la logica di business personalizzata durante determinate operazioni di Object Services, ad esempio modifiche alle proprietà o alle relazioni. La logica di business può includere la creazione di operazioni aggiuntive di convalida o di registrazione in caso di modifica delle proprietà o di chiamata a SaveChanges. È possibile richiamare la logica di business personalizzata tramite la gestione di eventi generati da Object Services o la definizione di metodi parziali personalizzati chiamati quando le proprietà vengono modificate.
Di seguito sono illustrati gli eventi e i metodi utilizzati per richiamare la logica di business personalizzata:
- OnProprietà Metodi parziali Changing e OnProprietàChanged
Coppia di metodi parziali su classi di dati generate chiamati da Object Services quando una proprietà viene modificata. Estendere questi metodi nelle classi di dati parziali per implementare il codice eseguito quando una proprietà viene modificata. Per ulteriori informazioni, vedere Procedura: eseguire la logica di business quando vengono modificate le proprietà (Entity Framework).
- Evento SavingChanges
Evento generato quando le modifiche memorizzate nella cache nel contesto dell'oggetto stanno per essere salvate nell'origine dati. Gestire questo evento per implementare la logica di business personalizzata all'inizio di un'operazione SaveChanges. Per ulteriori informazioni, vedere Procedura: eseguire la logica di business al momento del salvataggio delle modifiche (Entity Framework).
- Metodo OnContextCreated
Tramite gli strumenti di Entity Data Model viene generato un metodo parziale OnContextCreated nella classe che rappresenta l'oggetto EntityContainer per il modello e che eredita dalla classe ObjectContext. Questo metodo parziale viene chiamato ogni volta che viene creata un'istanza di ObjectContext. Implementare questo metodo parziale nel codice per registrare un gestore per l'evento SavingChanges. Per ulteriori informazioni, vedere Procedura: eseguire la logica di business al momento del salvataggio delle modifiche (Entity Framework).
- Evento AssociationChanged
Evento generato quando una relazione tra due oggetti viene modificata. Gestire questo evento per implementare la logica di business personalizzata quando una relazione viene modificata. Per ulteriori informazioni, vedere Procedura: modificare le relazioni tra gli oggetti (Entity Framework).
Classi di dati personalizzate
In alcuni casi la sola estensione delle classi parziali aggiungendo metodi e proprietà potrebbe non offrire sufficiente flessibilità. Si consideri un'applicazione .NET Framework esistente che utilizza ADO.NET per caricare i dati da un database in oggetti CLR affinché possano essere utilizzati dall'applicazione. Questi oggetti potrebbero contenere logica di business e personalizzazioni importanti che devono essere mantenute nel livello oggetti. Queste personalizzazioni potrebbero impedire la migrazione dell'applicazione per l'utilizzo di Entity Framework. Si potrebbe inoltre desiderare di disporre di un maggiore controllo sui tipi di entità e non semplicemente di estendere le classi parziali generate.
La modalità consigliata per utilizzare le classi di dati personalizzate con EDM consiste nell'ereditare da EntityObject. Se non è possibile ereditare da EntityObject oppure se si necessita di una maggiore indipendenza dal framework, Entity Framework fornisce un set di interfacce che è possibile implementare per utilizzare le classi di dati personalizzate con EDM. Per ulteriori informazioni, vedere Implementazione di interfacce di classi di dati personalizzate (Entity Framework). Quando si utilizzano classi di dati personalizzate, è necessario applicare gli attributi alle proprietà e alle classi di dati personalizzate e notificare il contesto dell'oggetto in caso di modifica delle proprietà.
Ereditarietà da EntityObject
Le classi di dati generate ereditano da EntityObject o da ComplexObject. Se è necessario utilizzare classi di dati personalizzate con EDM, è consigliabile modificare le classi di dati in modo che ereditino da una di queste due classi di base. In questo modo, nelle classi di dati personalizzate possono essere utilizzate le funzionalità di rilevamento delle modifiche e di gestione delle relazioni fornite da EntityObject.
Quando si eredita da EntityObject e da ComplexObject, prestare attenzione ai punti seguenti:
I nomi delle classi e delle proprietà devono corrispondere ai nomi dei tipi di entità e delle proprietà definiti nel file CSDL (Conceptual Schema Definition Language) di EDM. In caso di mancata corrispondenza, è necessario modificare i nomi delle classi di dati e delle proprietà oppure aggiornare i nomi nel file CSDL e nel file MSL (Mapping Specification Language) associato. Per ulteriori informazioni, vedere Procedura: personalizzare un modello EDM per l'utilizzo con oggetti personalizzati (Entity Framework).
A ogni proprietà del tipo di entità definita nel file CSDL deve essere associata una proprietà nella classe di dati personalizzata. Una classe di dati personalizzata può disporre di proprietà aggiuntive non mappate alle proprietà definite nel file CSDL.
È necessario applicare gli attributi alle proprietà e alle classi di dati personalizzate. Questi attributi forniscono un mapping esplicito tra gli oggetti e CSDL. Per ulteriori informazioni, vedere Attributi del mapping oggetto-entità (Entity Framework) e Procedura: eseguire il mapping di oggetti personalizzati alle entità (Entity Framework).
Per consentire il rilevamento delle modifiche agli oggetti personalizzati in Object Services, è necessario segnalare queste modifiche in un modello specifico utilizzando i metodi di segnalazione delle modifiche di EntityObject. Per ulteriori informazioni, vedere Segnalazione delle modifiche nelle classi di dati personalizzate (Entity Framework).
Gli strumenti di Entity Framework consentono inoltre di generare classi aggiuntive che semplificano la programmazione degli oggetti. Questo codice è utile con le classi di dati personalizzate. Per ulteriori informazioni, vedere Procedura: utilizzare Object Services con oggetti personalizzati (Entity Framework).
Quando si eredita da EntityObject, i tipi complessi devono essere implementati ereditando da ComplexObject. Per ulteriori informazioni, vedere Oggetti di tipo complesso (Entity Framework).
Nell'esempio seguente viene definita la classe di dati personalizzata Order che eredita da EntityObject:
<EdmEntityTypeAttribute(NamespaceName:="Microsoft.Samples.Edm", Name:="Order")> _
Public Class Order
Inherits EntityObject
[EdmEntityTypeAttribute(NamespaceName="Microsoft.Samples.Edm",Name="Order")]
public class Order : EntityObject
Per ulteriori informazioni, vedere Procedura: ereditare dalle classi di base EntityObject e ComplexObject (Entity Framework).
Contenuto della sezione
Segnalazione delle modifiche nelle classi di dati personalizzate (Entity Framework)
Implementazione di interfacce di classi di dati personalizzate (Entity Framework)
Vedere anche
Altre risorse
Object Services (Entity Framework)
Utilizzo di oggetti personalizzati (attività di Entity Framework)