Entity Data Model: ereditarietà

Entity Data Model (EDM) supporta l'ereditarietà per i tipi di entità. L'ereditarietà in EDM è analoga all'ereditarietà per le classi nei linguaggi di programmazione orientati a oggetti. Come con le classi nei linguaggi orientati a oggetti, in un modello concettuale è possibile definire un tipo di entità (un tipo derivato) che eredita da un altro tipo di entità (il tipo di base). Tuttavia, a differenza delle classi nella programmazione orientata a oggetti, in un modello concettuale il tipo derivato eredita sempre tutte le proprietà e le proprietà di navigazione del tipo di base. Non è possibile eseguire l'override delle proprietà ereditate in un tipo derivato.

In un modello concettuale è possibile compilare gerarchie di ereditarietà nelle quali un tipo derivato eredita da un altro tipo derivato. Il tipo all'inizio della gerarchia (il tipo nella gerarchia che non è un tipo derivato) viene detto tipo radice. In una gerarchia di ereditarietà, la chiave di entità deve essere definita sul tipo radice.

Non è possibile compilare gerarchie di ereditarietà nelle quali un tipo derivato eredita da più di un tipo. In un modello concettuale con un tipo di entità Book, ad esempio, è possibile definire i tipi derivati FictionBook e NonFictionBook che ereditano ognuno da Book. Non è quindi possibile, tuttavia, definire un tipo che eredita sia dal tipo FictionBook che dal tipo NonFictionBook.

Esempio

Nel diagramma seguente viene illustrato un modello concettuale con quattro tipi di entità: Book, FictionBook, Publisher e Author. Il tipo di entità FictionBook è un tipo derivato, che eredita dal tipo di entità Book. Il tipo FictionBook eredita le proprietà ISBN (Key), Title e Revision e definisce una proprietà aggiuntiva chiamata Genre.

Diagram that shows a conceptual model with four entity types.

ADO.NET Entity Framework usa un linguaggio specifico di dominio (DSL) denominato Conceptual Schema Definition Language (CSDL) per definire i modelli concettuali. Nel seguente linguaggio CSDL viene definito un tipo di entità, FictionBook, che eredita dal tipo Book (come nel diagramma precedente):

<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
  <Property Type="String" Name="Genre" Nullable="false" />
</EntityType>

Vedi anche