Condividi tramite


Concetti chiave di Entity Data Model

In EDM (Entity Data Model) si utilizzano tre concetti chiave per descrivere la struttura di dati: tipo di entità, tipo di associazione e proprietà. Si tratta dei concetti più importanti nella descrizione della struttura di dati in qualsiasi implementazione di EDM.

Tipo di entità

Il tipo di entità è il blocco predefinito fondamentale per la descrizione della struttura di dati con Entity Data Model. In un modello concettuale, i tipi di entità vengono costruiti dalle proprietà e descrivono la struttura di concetti di livello superiore, ad esempio i clienti e gli ordini in un'applicazione aziendale. Esattamente come una definizione di classe in un programma informatico è un modello per le istanze della classe, un tipo di entità è un modello per le entità. Un'entità rappresenta un oggetto specifico (ad esempio un cliente o un ordine specifico). Ogni entità deve disporre di una chiave di entità univoca all'interno di un set di entità. Un set di entità è una raccolta di istanze di un tipo di entità specifico. I set di entità (e i set di associazioni) sono raggruppati logicamente in un contenitore di entità.

L'ereditarietà è supportata con i tipi di entità, ovvero un tipo di entità può essere derivato da un altro. Per ulteriori informazioni, vedere Entity Data Model: ereditarietà.

Tipo di associazione

Un tipo di associazione (detto anche associazione) è il blocco predefinito fondamentale per la descrizione delle relazioni in Entity Data Model. In un modello concettuale, un'associazione rappresenta una relazione tra due tipi di entità (ad esempio, Customer e Order). Ogni associazione dispone di due entità finali dell'associazione che specificano i tipi di entità coinvolti nell'associazione. Ogni entità finale dell'associazione specifica inoltre una molteplicità di entità finale dell'associazione che indica il numero di entità che possono trovarsi a tale entità finale dell'associazione. Una molteplicità di entità finale dell'associazione può disporre di un valore pari a uno (1), zero o uno (0..1) o molti (*). Le entità in corrispondenza di un'entità finale di un'associazione sono accessibili attraverso proprietà di navigazione o chiavi esterne se sono esposte in un tipo di entità. Per ulteriori informazioni, vedere proprietà di chiave esterna (Entity Data Model).

In un'applicazione, un'istanza di un'associazione rappresenta un'associazione specifica (ad esempio, un'associazione tra un'istanza relativa al cliente e istanze relative all'ordine). Le istanze dell'associazione sono raggruppate logicamente in un set di associazioni. I set di associazioni (e i set di entità) sono raggruppati logicamente in un contenitore di entità.

Proprietà

I tipi di entità contengono proprietà che ne definiscono la struttura e le caratteristiche. È, ad esempio, possibile che un tipo di entità Customer disponga di proprietà quali CustomerId, Name e Address.

Le proprietà in un modello concettuale sono analoghe alle proprietà definite su una classe in un programma informatico. Nello stesso modo in cui le proprietà su una classe definiscono la forma della classe e forniscono informazioni su oggetti, le proprietà in un modello concettuale definiscono la forma di un tipo di entità e forniscono informazioni su istanze del tipo di entità.

Una proprietà può contenere dati primitivi (ad esempio una stringa, un Integer o un valore booleano) o dati strutturati (ad esempio un tipo complesso). Per ulteriori informazioni, vedere Entity Data Model: tipi di dati primitivi.

Rappresentazioni di un modello concettuale

Un modello concettuale è una rappresentazione specifica della struttura di alcuni dati come entità e relazioni. È possibile rappresentare un modello concettuale tramite un diagramma. Nel diagramma seguente viene rappresentato un modello concettuale con tre tipi di entità (Book, Publisher e Author) e due associazioni (PublishedBy e WrittenBy):

Modello con proprietà di navigazione

Questa rappresentazione, tuttavia, presenta alcuni difetti quando è necessario illustrare alcuni dettagli relativi al modello. Le informazioni sul tipo di proprietà e sul set di entità, ad esempio, non sono illustrate nel diagramma. La ricchezza di un modello concettuale può essere illustrata più chiaramente con un linguaggio specifico di dominio. ADO.NET Entity Framework utilizza un linguaggio specifico di dominio basato su XML detto CSDL (Conceptual Schema Definition Language) per definire i modelli concettuali. Di seguito è riportata la definizione CSDL del modello concettuale nel diagramma precedente:

  <Schema xmlns="https://schemas.microsoft.com/ado/2008/09/edm"
          xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
          xmlns:store="https://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
          Namespace="BooksModel" Alias="Self">
    <EntityContainer Name="BooksContainer" >
      <EntitySet Name="Books" EntityType="BooksModel.Book" />
      <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
      <EntitySet Name="Authors" EntityType="BooksModel.Author" />
      <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Publisher" EntitySet="Publishers" />
      </AssociationSet>
      <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Author" EntitySet="Authors" />
      </AssociationSet>
    </EntityContainer>
    <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>
    <EntityType Name="Publisher">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                          FromRole="Publisher" ToRole="Book" />
    </EntityType>
    <EntityType Name="Author">
      <Key>
        <PropertyRef Name="Name" />
        <PropertyRef Name="Address" />
      </Key>
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                          FromRole="Author" ToRole="Book" />
    </EntityType>
<Association Name="PublishedBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
    </Association>
    <Association Name="WrittenBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
    </Association>
  </Schema>

Vedere anche

Concetti

Entity Data Model