Condividi tramite


Entity Data Model: Ereditarietà

Entity Data Model (EDM) supporta l'ereditarietà per i tipi di entità. L'ereditarietà nell'EDM è simile all'ereditarietà per le classi nei linguaggi di programmazione orientati agli oggetti. Analogamente alle classi nei linguaggi orientati agli oggetti, in un modello concettuale è possibile definire un tipo di entità (un tipo derivato) che eredita da un altro tipo di entità (tipo di base). Tuttavia, a differenza delle classi nella programmazione orientata agli 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à in cui un tipo derivato eredita da un altro tipo derivato. Il tipo all'inizio della gerarchia (quello della gerarchia che non è un tipo derivato) viene chiamato tipo radice. In una gerarchia di ereditarietà la chiave di entità deve essere definita nel tipo radice.

Non è possibile compilare gerarchie di ereditarietà in cui un tipo derivato eredita da più tipi. Ad esempio, in un modello concettuale con un Book tipo di entità è possibile definire i tipi FictionBook derivati e NonFictionBook che ognuno eredita da Book. Tuttavia, non è possibile definire un tipo che eredita da entrambi i tipi FictionBook e NonFictionBook.

Esempio

Il diagramma seguente illustra un modello concettuale con quattro tipi di entità: Book, FictionBookPublisher, e Author. Il FictionBook tipo di entità è un tipo derivato, che eredita dal Book tipo di entità. Il FictionBook tipo eredita le ISBN (Key)proprietà , Titlee Revision e definisce una proprietà aggiuntiva denominata Genre.

Diagramma che mostra un modello concettuale con quattro tipi di entità.

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

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

Vedere anche