Proprietà di navigazione

Una proprietà di navigazione è una proprietà facoltativa in un tipo di entità che consente la navigazione da un’entità finale di un'associazione all'altra entità finale. A differenza di altre proprietà, le proprietà di navigazione non contengono dati.

Una definizione di proprietà di navigazione include quanto segue:

  • Un nome. (obbligatorio).

  • L'associazione all'interno della quale naviga (obbligatorio).

  • Le entità finali dell'associazione all'interno della quale naviga (obbligatorio).

Si noti che le proprietà di navigazione sono facoltative in entrambi tipi di entità nelle entità finali di un'associazione. Se si definisce una proprietà di navigazione su un tipo di entità nell'entità finale di un'associazione, non è necessario definire una proprietà di navigazione sul tipo di entità nell'altra entità finale dell'associazione.

Il tipo di dati di una proprietà di navigazione è determinato dalla molteplicità della relativa entità finale dell'associazione remota. Si supponga ad esempio che esista una proprietà di navigazione, OrdersNavProp, in un tipo di entità Customer e che tale proprietà navighi in un'associazione uno-a-molti tra Customer e Order. Poiché l'entità finale dell'associazione remota per la proprietà di navigazione dispone della molteplicità molti (*), il relativo tipo di dati è una raccolta (di Order). Analogamente, se esiste una proprietà di navigazione CustomerNavProp nel tipo di entità Order, il relativo tipo di dati sarebbe Customer, perché la molteplicità dell'entità finale remota è uno (1).

Esempio

Nel diagramma seguente viene illustrato un modello concettuale con tre tipi di entità: Book, Publisher e Author. Le proprietà di navigazione, Publisher e Authors, vengono definite nel tipo di entità Book. La proprietà di navigazione Books viene definita sia nel tipo di entità Publisher che nel tipo di entità Author.

Diagram showing a conceptual model with three entity types.

ADO.NET Entity Framework usa un linguaggio specifico di dominio (DSL) denominato Conceptual Schema Definition Language (CSDL) per definire i modelli concettuali. Il linguaggio CSDL seguente definisce il tipo di entità Book illustrato nel diagramma precedente:

<EntityType Name="Book">
  <Key>
    <PropertyRef Name="ISBN" />
  </Key>
  <Property Type="String" Name="ISBN" Nullable="false" />
  <Property Type="String" Name="Title" Nullable="false" />
  <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
  <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                      FromRole="Book" ToRole="Publisher" />
  <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                      FromRole="Book" ToRole="Author" />
</EntityType>

Si noti che, per comunicare le informazioni necessarie per definire una proprietà di navigazione, vengono usati attributi XML: l'attributo Name contiene il nome della proprietà, Relationship contiene il nome dell'associazione all'interno della quale naviga e FromRole e ToRole contengono le entità finali dell'associazione.

Vedi anche