Oggetti di tipo complesso (Entity Framework)
I tipi complessi sono proprietà non scalari di tipi di entità che consentono l'organizzazione delle proprietà scalari nelle entità. Analogamente alle entità, i tipi complessi sono costituiti da proprietà scalari o da altre proprietà dei tipi complessi. Poiché i tipi complessi non dispongono di chiavi, gli oggetti di tipo complesso non possono essere gestiti da Entity Framework separatamente dall'oggetto padre. Per ulteriori informazioni, vedere Elemento ComplexType (CSDL).
Quando tramite gli strumenti di Entity Framework vengono generati oggetti che rappresentano tipi di entità, questi oggetti ereditano da EntityObject. Analogamente, gli oggetti generati per i tipi complessi ereditano da ComplexObject. Entrambe queste classi ereditano dalla classe di base StructuralObject. È possibile accedere alle proprietà scalari degli oggetti di tipo complesso nello stesso modo utilizzato per tutte le altre proprietà scalari. Per ulteriori informazioni, vedere Procedura: eseguire query su tipi complessi (Entity Framework).
Quando si utilizzano oggetti che rappresentano tipi complessi, prestare attenzione ai punti seguenti:
Le proprietà dei tipi complessi non possono essere null. Se viene chiamato il metodo SaveChanges e viene rilevato un oggetto complesso null, si verifica un'eccezione InvalidOperationException. Analogamente alle proprietà scalari delle entità, anche le proprietà scalari degli oggetti complessi possono essere null.
I tipi complessi non possono ereditare da altri tipi complessi.
Quando una proprietà viene modificata in un punto qualsiasi dell'oggetto grafico di un tipo complesso, la proprietà del tipo padre viene contrassegnata come modificata e tutte le proprietà dell'oggetto grafico del tipo complesso vengono aggiornate quando viene chiamato SaveChanges.
Se il livello oggetti viene generato mediante gli strumenti di Entity Data Model , vengono create istanze di oggetti complessi quando si accede alla proprietà del tipo complesso e non quando viene creata un'istanza dell'oggetto padre.
Quando si utilizzano tipi POCO (Plain-Old CLR Objects) contenenti proprietà dei tipi complessi, si applicano le considerazioni seguenti:
È necessario definire il tipo complesso come class.
Le modifiche apportate ai membri dell'istanza del tipo complesso vengono sempre rilevate mediante il metodo basato sullo snapshot. Per ulteriori informazioni, vedere Rilevamento delle modifiche nelle entità POCO (Entity Framework).
Negli argomenti seguenti viene descritto come eseguire varie attività che comportano l'utilizzo di tipi complessi mediante ADO.NET Entity Data Model Designer:
How to: Create and Modify Complex Types
How to: Add a Complex Type Property to an Entity
How to: Refactor Existing Properties into a Complex type Property
How to: Map Complex Type Properties to Table Columns
How to: Map a Function Import to a Complex Type