Contenitori di entità (EDM)
In Entity Data Model (EDM) un oggetto EntityContainer è un raggruppamento logico di set di entità e set di associazioni. Poiché il modello di programmazione viene compilato in base allo schema CSDL (Conceptual Schema Definition Language), EntityContainer è la specifica per uno spazio dei nomi nel modello a oggetti definito. Nello schema SSDL (Store Schema Definition Language) EntityContainer identifica il contenitore di archiviazione in cui vengono mantenuti i dati per le applicazioni compilate in base al modello. Può trattarsi di un database in un sistema di gestione di database relazionali (RDBMS) o di un'altra tecnologia.
EntityContainer controlla l'ambito di entità e relazioni. Tutti i tipi in EDM sono definiti nell'ambito di uno spazio dei nomi EntityContainer. Istanze di EntitySet e AssociationSet vengono create nell'ambito di un EntityContainer. Allo stesso modo, istanze di EntityType o Association vengono create nell'ambito di un EntitySet o AssociationSet.
Nella gerarchia XML l'elemento EntityContainer è distinto dall'elemento Schema anche se EntityContainer è definito in uno schema. Questo aspetto è importante per il mapping dell'elemento EntityContainer da archiviare. Nel file di mapping il nome completo di EntityContainer non include il nome dello spazio dei nomi dello schema.
Un elemento EntityContainer è derivato dal costrutto di base EntityContainer fornito da EDM. EntityContainer specifica i tipi derivati da EntitySet e AssociationSet.
Un elemento EntitySet definito in un EntityContainer può contenere un EntityType definito in un EntityContainer separato.
Un elemento AssociationSet non può fare riferimento a un EntitySet definito in un EntityContainer separato.
Nell'esempio seguente vengono illustrate le dichiarazioni di due tipi di entità e di un tipo di associazione, quindi la dichiarazione di un oggetto EntityContainer con due set di entità e un set di associazioni.
Nello schema seguente sono incluse le dichiarazioni delle entità:
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.EntityTypes" Alias="Self">
<EntityType Name="Order">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Name="OrderId" Type="String" />
<!--Other Properties-->
</EntityType>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Name="CustomerId" Type="String" />
<!--Other Properties-->
</EntityType>
</Schema>
Nello schema seguente sono incluse le dichiarazioni delle associazioni:
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.RelationshipTypes">
<Using Namespace="MyCompany.EntityTypes" Alias="basicTypes"/>
<Association Name="CustomerOrder">
<End Type="basicTypes.Customer" Multiplicity="1" />
<End Type="basicTypes.Order" Multiplicity="*" />
</Association>
</Schema>
Nello schema seguente è inclusa la dichiarazione del contenitore di entità:
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.ContainerType">
<EntityContainer name="ContainerOne">
<Using Namespace="MyCompany.EntityTypes" Alias="basicTypes"/>
<Using Namespace="MyCompany.RelationshipTypes" Alias="relnTypes"/>
<EntitySet Name="CustomerSet" EntityType="basicTypes.Customer"/>
<EntitySet Name="OrderSet" EntityType="basicTypes.Order"/>
<AssociationSet Name="CustomerOrderSet" Association="relnTypes.CustomerOrder">
<End EntitySet="CustomerSet" Role="Orders"/>
<End EntitySet="OrderSet" Role="OrderedBy"/>
</AssociationSet>
</EntityContainer>
</Schema>