set di entità (Entity Data Model)
Un set di entità è un contenitore logico per istanze di un tipo di entità e istanze di qualsiasi tipo derivato da tale tipo di entità. Per informazioni sui tipi derivati, vedere Entity Data Model: ereditarietà. La relazione tra un tipo di entità e un set di entità è analoga alla relazione tra una riga e una tabella in un database relazionale: come una riga, un tipo di entità descrive la struttura di dati e, come una tabella, un set di entità contiene le istanze di una determinata struttura. Un set di entità non è un costrutto di modellazione dati e non descrive la struttura di dati. Un set di entità, 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 del tipo di entità in modo che se ne possa eseguire il mapping a un archivio dati.
Un set di entità è definito all'interno di un contenitore di entità, che costituisce un raggruppamento logico di set di entità e di set di associazioni.
Perché un'istanza di un tipo di entità esista in un set di entità, devono essere osservate le seguenti condizioni:
Il tipo dell'istanza è lo stesso del tipo di entità su cui si basa il set di entità oppure il tipo dell'istanza è un sottotipo del tipo di entità.
La chiave di entità per l'istanza è univoca all'interno del set di entità.
L'istanza non esiste in nessun altro set di entità.
Nota: È possibile definire più set di entità tramite lo stesso tipo di entità, ma un'istanza di un determinato tipo di entità può esistere in un solo set di entità.
Non è necessario definire un set di entità per ogni tipo di entità in un modello concettuale.
Esempio
Nel diagramma seguente viene illustrato un modello concettuale con tre tipi di entità: Book, Publisher e Author.
Nel diagramma seguente vengono illustrati due set di entità (Books e Publishers) e un set di associazioni (PublishedBy) 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.
ADO.NET Entity Framework utilizza un linguaggio specifico di dominio detto CSDL (Conceptual Schema Definition Language) per definire i modelli concettuali. Il linguaggio CSDL seguente definisce un contenitore di entità con un set di entità per ogni tipo di entità nel modello concettuale illustrato in precedenza. Si noti che il nome e il tipo di entità per ogni set di entità 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 entità per tipo (MEST). Il linguaggio CSDL seguente definisce un contenitore di entità con due set di entità per il tipo di entità Book:
<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" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>