Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le entità e le associazioni Entity Data Model (EDM) sono le specifiche formali per gli oggetti programmabili nel codice dell'applicazione. Con o senza i dati esistenti, le entità e le associazioni sono dichiarate e definite nella sintassi CSDL (Conceptual Schema Definition Language). La scrittura di uno schema in CSDL è in genere il primo passaggio per la progettazione di un'applicazione compilata in base a EDM.
L'applicazione EDM illustrata in questi argomenti e in quelli precedenti e successivi utilizza i dati esistenti nel database di esempio Northwind, pertanto il modello di archiviazione è già implementato. Per l'utilizzo dei dati in questa applicazione è necessario prestare attenzione alla struttura delle tabelle esistenti quando si definiscono i tipi di entità e le associazioni nel dominio dell'applicazione.
L'implementazione include le specifiche concettuali, i metadati di archiviazione, una specifica di mapping e un codice dell'applicazione utilizzando il modello a oggetti compilato in base agli schemi e alle specifiche di mapping.
Dall'esempio di schema in questa sezione vengono definite quattro entità e due associazioni. I tipi di entità definiti sono derivati dagli schemi della classe di base installati con ADO.NET. Per una panoramica degli schemi e del mapping, vedere Specifica di schemi e mapping (Entity Framework).
Nell'esempio seguente il tag <Schema> di apertura contiene una dichiarazione dello spazio dei nomi definito: NorthwindLib. Lo spazio dei nomi ha un alias, Self, utilizzato come identificatore breve nel corpo dello schema. Gli URL nel tag <Schema> di apertura sono gli stessi in tutte le applicazioni EDM.
I tag <Documentation> includono informazioni utili agli sviluppatori. Il testo tra i tag Documentation è più di un commento del codice. Dopo la compilazione della libreria di oggetti, le informazioni vengono visualizzate nel Visualizzatore oggetti in Visual Studio e negli altri strumenti utilizzati per esplorare le classi. In questo esempio il testo identifica lo schema definito nel file XML.
Tre entità in questo esempio sono definite all'interno dei tag <EntityType>. Ogni entità include un attributo Key che indica la proprietà dell'entità che costituisce l'identificatore univoco per le istanze di questo tipo. Due tipi <Association> vengono specificati dalle proprietà Name e End Role che forniscono l'ambito per i tipi correlati dalle associazioni. In questo esempio un'associazione e una proprietà di navigazione connettono le istanze dell'entità Product con le entità Category a cui sono correlate logicamente. Un'altra associazione connette le istanze di Order con le istanze delle entità Customers che creano gli ordini. Per ulteriori informazioni sulle associazioni, vedere Relazioni in Entity Data Model.
<?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="NorthwindLib" Alias="Self">
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductID" />
</Key>
<Property Name="ProductID" Type="Int32" Nullable="false" />
<Property Name="ProductName" Type="String"
Nullable="false" ConcurrencyMode="Fixed" />
<Property Name="UnitPrice" Type="Decimal"
Nullable="true" ConcurrencyMode="Fixed" />
<NavigationProperty Name="Category"
Relationship="Self.Category_Product" FromRole="Product"
ToRole="Category" />
</EntityType>
<EntityType Name="DiscontinuedProduct" BaseType="Self.Product">
<!-- Units in stock for discontinued products. -->
<Property Name="UnitsInStock" Type="Int16" Nullable="true" />
</EntityType>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerID" />
</Key>
<Property Name="CustomerID" Type="String" Nullable="false" />
<Property Name="CompanyName" Type="String"
Nullable="false" ConcurrencyMode="Fixed" />
<Property Name="ContactName" Type="String"
Nullable="true" ConcurrencyMode="Fixed" />
<Property Name="City" Type="String"
Nullable="true" ConcurrencyMode="Fixed" />
<Property Name="Country" Type="String"
Nullable="true" ConcurrencyMode="Fixed" />
<NavigationProperty Name="SalesOrders"
Relationship="Self.Customer_Order" FromRole="Customer"
ToRole="SalesOrder" />
</EntityType>
<EntityType Name="Category">
<Key>
<PropertyRef Name="CategoryID" />
</Key>
<Property Name="CategoryID" Type="Int32" Nullable="false" />
<Property Name="CategoryName" Type="String"
Nullable="false" ConcurrencyMode="Fixed" />
<Property Name="Description" Type="String" Nullable="true" />
<NavigationProperty Name="Products"
Relationship="Self.Category_Product"
FromRole="Category" ToRole="Product" />
</EntityType>
<EntityType Name="SalesOrder">
<Key>
<PropertyRef Name="OrderID" />
</Key>
<Property Name="OrderID" Type="Int32" Nullable="false" />
<Property Name="OrderDate" Type="DateTime" Nullable="true" />
<Property Name="ShipCity" Type="String" Nullable="true" />
<Property Name="ShipCountry" Type="String" Nullable="true" />
<NavigationProperty Name="Customer"
Relationship="Self.Customer_Order"
FromRole="SalesOrder" ToRole="Customer" />
</EntityType>
<Association Name="Customer_Order">
<End Role="Customer" Type="Self.Customer" Multiplicity="1" />
<End Role="SalesOrder" Type="Self.SalesOrder" Multiplicity="*" />
</Association>
<Association Name="Category_Product">
<End Role="Category" Type="Self.Category" Multiplicity="1" />
<End Role="Product" Type="Self.Product" Multiplicity="*" />
</Association>
<EntityContainer Name="Northwind">
<EntitySet Name="Categories" EntityType="Self.Category" />
<EntitySet Name="Products" EntityType="Self.Product" />
<EntitySet Name="Customers" EntityType="Self.Customer" />
<EntitySet Name="SalesOrders" EntityType="Self.SalesOrder" />
<AssociationSet Name="CustomerOrders"
Association="Self.Customer_Order">
<End Role="Customer" EntitySet="Customers" />
<End Role="SalesOrder" EntitySet="SalesOrders" />
</AssociationSet>
<AssociationSet Name="CategoryProducts"
Association="Self.Category_Product">
<End Role="Category" EntitySet="Categories" />
<End Role="Product" EntitySet="Products" />
</AssociationSet>
</EntityContainer>
</Schema>
I tag utilizzati con maggiore frequenza in questo schema sono i tag <Property>. Le proprietà specificano i diversi tipi di dati contenuti da ogni oggetto <EntityType>. Le proprietà di Product includono, ad esempio ProductID, ProductName, UnitPrice e l'oggetto NavigationProperty denominato Category che correla questo prodotto a un set di prodotti simili. Questo gruppo di proprietà definisce l'entità Product.
I tag <EntityContainer> EDM specificano un contenitore che verrà mappato a un oggetto di database (dbo) nello schema dei metadati di archiviazione. In questo oggetto <EntityContainer> sono presenti tre specifiche <EntitySet> e due specifiche <AssociationSet>.
Per ulteriori informazioni sulla sintassi XML utilizzata in questo file CSDL, vedere Schemi (EDM). Per informazioni sulle proprietà di navigazione, vedere Implementazione delle associazioni (EDM).
Vedere anche
Concetti
Tipi EDM (Entity Data Model)
Relazioni in Entity Data Model
Schemi (EDM)
Implementazione delle associazioni (EDM)