set di associazioni

Un set di associazioni è un contenitore logico per istanze di associazione dello stesso tipo. Un set di associazioni non è un costrutto di modellazione dati, ovvero non descrive la struttura di dati o relazioni. Un set di associazioni, invece, fornisce un costrutto per un ambiente host o di archiviazione (ad esempio Common Language Runtime o un database SQL Server) per raggruppare le istanze dell'associazione in modo che se ne possa eseguire il mapping a un archivio dati.

Un set di associazioni è definito all'interno di un contenitore di entità, che costituisce un raggruppamento logico di set di entità e di set di associazioni.

Una definizione per un set di associazioni contiene le informazioni seguenti:

Esempio

Nel diagramma seguente viene illustrato un modello concettuale con due associazioni: PublishedBy e WrittenBy. Anche se le informazioni sui set di associazioni non sono contenute nel diagramma, nel diagramma successivo viene illustrato un esempio di set di associazioni e di set di entità basato su questo modello.

Example model with three entity types

Nell'esempio seguente vengono illustrati un set di associazioni (PublishedBy) e due set di entità (Books e Publishers) basati sul modello concettuale illustrato in precedenza. Bi nel set di entità Books rappresenta un'istanza del tipo di entità Book in fase di esecuzione. Analogamente, Pj rappresenta un'istanza di Publisher nel set di entità Publishers. BiPj rappresenta un'istanza dell'associazione PublishedBy nel set di associazioni PublishedBy.

Screenshot that shows a Sets example.

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 un contenitore di entità con un set di associazioni per ogni associazione nel diagramma precedente. Si noti che il nome e l'associazione per ogni set di associazioni sono definiti tramite attributi XML.

<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>

È possibile definire più set di associazioni per associazione, purché due set di associazioni non condividano un'entità finale del set di associazioni. Nel linguaggio seguente viene definito un contenitore di entità con due set di associazioni per l'associazione WrittenBy. Si noti che più set di entità sono stati definiti per i tipi di entità Book e Author e che nessun set di associazioni condivide un'entità finale del set di associazioni.

<EntityContainer Name="BooksContainer" >
  <EntitySet Name="Books" EntityType="BooksModel.Book" />
  <EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
  <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
  <EntitySet Name="Authors" EntityType="BooksModel.Author" />
  <EntitySet Name="FictionAuthors" 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>
  <AssociationSet Name="FictionWrittenBy" Association="BooksModel.WrittenBy">
    <End Role="Book" EntitySet="FictionBooks" />
    <End Role="Author" EntitySet="FictionAuthors" />
  </AssociationSet>
</EntityContainer>

Vedi anche