Condividi tramite


Implementazione di entità (EDM)

In tutte le applicazioni Entity Data Model (EDM) le entità vengono definite in Conceptual Schema Definition Language (CSDL) e mappate a metadati che descrivono le strutture dei dati in Store Schema Definition Language (SSDL). In questo esempio viene illustrata la progettazione di una singola entità e viene descritto il modo in cui questa viene mappata all'archivio.

L'applicazione per cui viene progettata questa entità di esempio definisce informazioni sui dipendenti in un'azienda.

Schema concettuale

L'entità definita nella sintassi CSDL (Conceptual Schema Definition Language) seguente contiene la specifica per un tipo di dati nell'oggetto Namespace denominato Employes. L'oggetto Namespace contiene una sola dichiarazione di EntityType, ovvero Employees.

Le proprietà dell'entità Employees contengono informazioni di base che identificano un dipendente. La proprietà EmployeeId viene dichiarata come oggetto Guid che identifica in modo univoco un'istanza del tipo. La proprietà EmployeeId è contrassegnata come proprietà chiave.

Altre tre proprietà identificano il dipendente in base a FirstName, LastName e indirizzo Email.

Oltre alla specifica dell'entità, uno schema CSDL contiene dichiarazioni di EntitySet e di EntityContainer. Le specifiche di EntityContainer e EntitySet definiscono l'ambito dei tipi di dati nel modello di dati. EntityContainer contiene l'oggetto EntitySet. In questo esempio un oggetto EntitySet denominato Employees contiene il tipo Employee.

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees" Alias="Self" xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <EntityContainer Name="EmployeesContext">
    <EntitySet Name="Employees" EntityType="Employees.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="Guid" Nullable="false" />
    <Property Name="LastName" Type="String" Nullable="false" />
    <Property Name="FirstName" Type="String" Nullable="false" />
    <Property Name="Email" Type="String" Nullable="false" />
  </EntityType>
</Schema>

Lo schema Namespace contiene l'entità Employee e tutti i set, ad eccezione di EntityContainer, separato e indipendente dallo schema Namespace. Per ulteriori informazioni su EntityContainer, vedere Elemento EntityContainerMapping (MSL).

Le applicazioni compilate in base a questo modello di dati fanno riferimento a Namespace per utilizzare la classe compilata in base al modello.

Questa specifica CSDL è denominata schema concettuale o di progettazione. Nomi di entità paralleli nei metadati di archiviazione in sintassi SSDL corrispondono a strutture di archiviazione. L'oggetto EntitySet in questo schema CSDL corrisponde al nome di una tabella specificata nello schema SSDL. La tabella contiene dati per le istanze dell'entità Employee utilizzata dalle applicazioni compilate in base al modello. Le proprietà dell'entità Employee corrispondono alle colonne della tabella.

Schema di archiviazione

I metadati di archiviazione in SSDL descrivono il database che contiene istanze dell'oggetto Employees definito nello schema concettuale.

Lo spazio dei nomi Employees.Store definito nello schema seguente corrisponde al database di destinazione del modello Employees definito nello schema concettuale.

L'oggetto EntitySet denominato Employees in questo schema rappresenta una tabella dati denominata Employees. L'oggetto EntityType specificato dallo schema corrisponde all'oggetto EntityType definito nello schema concettuale. Il nome nei metadati di archiviazione non deve corrispondere al nome nello schema concettuale, bensì al nome della tabella di database.

Nello schema seguente viene descritto un oggetto di database dbo rappresentato dall'oggetto EntityContainer specificato nel file SSDL. EntityContainer in questo esempio contiene una tabella denominata Employees.

?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees.Store" Alias="Self"
    Provider="System.Data.SqlClient"
    ProviderManifestToken="2005"
    xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">
  <EntityContainer Name="dbo">
    <EntitySet Name="Employees" EntityType="Employees.Store.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="uniqueidentifier" Nullable="false" />
    <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
    <Property Name="FirstName" Type="nvarchar" Nullable="false" />
    <Property Name="Email" Type="nvarchar" Nullable="false" />
  </EntityType>
</Schema>

Specifica di mapping

La specifica di mapping viene definita in Mapping Specification Language (MSL). Tale specifica MSL connette lo schema CSDL al database utilizzando i metadati nello schema SSDL.

Gli elementi di questo schema MSL includono i mapping EntityContainerMapping, StorageEntityContainer, EntityTypeMapping, MappingFragment e ScalarProperty. EntityContainerMapping esegue il mapping di un oggetto CdmEntityContainer a un oggetto StorageEntityContainer, in questo caso del contenitore di entità EmployeeSkills all'oggetto di database dbo.

I nomi assegnati a StorageEntityContainer e CdmEntityContainer non sono qualificati dagli spazi dei nomi dello schema. StorageEntityContainer e CdmEntityContainer sono separati e indipendenti dell'elemento dello schema sia nello schema concettuale che nei metadati di archiviazione. L'utilizzo di un nome dello spazio dei nomi per qualificare un nome StorageEntityContainer e CdmEntityContainer comporterà un'eccezione di mapping.

In base ai mapping ****StorageEntityContainer e CdmEntityContainer, EntitySetMapping specifica l'oggetto StoreEntitySet che corrisponde allo schema concettuale.

TypeName, Employees.

Le proprietà di TypeName vengono mappate da elementi ScalarProperty come attributi Name corrispondenti a un elemento ColumnName, ad esempio Name="EmployeeId" ColumnName="EmployeeId". La sintassi Name specifica una proprietà di un'entità dello schema concettuale, mentre ColumnName specifica una colonna della tabella dati Employees nel database di destinazione.

<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" 
     xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

  <EntityContainerMapping StorageEntityContainer="dbo"
        CdmEntityContainer="EmployeesContext">
    <EntitySetMapping Name="Employees" StoreEntitySet="Employees"
        TypeName="Employees.Employees">

      <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="Email" ColumnName="Email" />

    </EntitySetMapping>
  </EntityContainerMapping>
</Mapping>

Vedere anche

Concetti

Implementazione delle associazioni (EDM)

Altre risorse

Specifica di schemi e mapping (Entity Framework)
Specifiche EDM