Share via


Implementar entidades (EDM)

En todas las aplicaciones del Entity Data Model (EDM), las entidades se definen en el lenguaje de definición de esquemas conceptuales (CSDL, Conceptual Schema Definition Language) y se asignan a los metadatos que describen las estructuras de datos en el lenguaje de definición de esquemas de almacenamiento (SSDL, Store Schema Definition Language). En este ejemplo se muestra el diseño de una sola entidad y cómo se asigna al almacenamiento.

La aplicación para la que esta entidad de ejemplo está diseñada define información relativa a los empleados de una empresa comercial.

Esquema conceptual

La entidad definida en la sintaxis del lenguaje de definición de esquemas conceptuales (CSDL) contiene la especificación de un tipo de datos en el espacio de nombres denominado Employes. El espacio de nombres contiene una única declaración de EntityType: Employees.

Las propiedades de la entidad Employees contienen información básica que identifica a un empleado. La propiedad EmployeeId se declara como un Guid que identifica de forma única una instancia del tipo. La propiedad EmployeeId se etiqueta como la Clave.

Tres propiedades más identifican al empleado por FirstName, LastName y dirección de Email.

Además de la especificación de la entidad, un esquema de CSDL contiene declaraciones de EntitySet y EntityContainer. Las especificaciones de EntityContainer y EntitySet definen el ámbito de los tipos de datos del modelo de datos. El EntityContainer contiene el EntitySet. En este ejemplo, un EntitySet denominado Employees contiene el 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>

El esquema del espacio de nombres contiene la entidad Employee y todos los conjuntos excepto EntityContainer, que es diferente e independiente del Namespace del esquema. Para obtener más información acerca del EntityContainer, vea Elemento EntityContainerMapping (MSL).

Las aplicaciones integradas en este modelo de datos hacen referencia al espacio de nombres para usar la clase integrada en este modelo.

La especificación de CSDL se conoce como esquema de diseño o conceptual. Los nombres de las entidades paralelas de los metadatos de almacenamiento que tienen la sintaxis de SSDL se corresponden con las estructuras de almacenamiento. El EntitySet de este esquema de CSDL se corresponde con el nombre de una tabla especificada en el esquema de SSDL. La tabla contiene datos para las instancias de la entidad Employee usada por las aplicaciones integradas en el modelo. Las propiedades de la entidad Employee corresponden a las columnas de la tabla.

Esquema de almacenamiento

Los metadatos de almacenamiento de SSDL describen la base de datos que contiene las instancias del objeto Employees definido en el esquema conceptual.

El espacio de nombres Employees.Store definido en el esquema siguiente es la base de datos de destino del modelo Employees que se ha definido en el esquema conceptual.

El EntitySetEmployees de este esquema representa una tabla de datos denominada Employees. El EntityType especificado por este esquema se corresponde con el EntityType definido en el esquema conceptual. El nombre de los metadatos de almacenamiento no tiene que coincidir con el del esquema conceptual, pero sí con el de la tabla de la base de datos.

El esquema siguiente describe un objeto de base de datos dbo representado por el EntityContainer especificado en el archivo de SSDL. El EntityContainer de este ejemplo contiene una tabla denominada 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>

Especificación de asignaciones

La especificación de la asignación se define en el lenguaje de definición de asignaciones (MSL, Mapping Specification Language). Esta especificación de MSL conecta el esquema de CSDL con la base de datos a través de los metadatos del esquema de SSDL.

Los elementos de este esquema de MSL incluyen las asignaciones EntityContainerMapping, StorageEntityContainer, EntityTypeMapping, MappingFragment y de ScalarProperty. EntityContainerMapping asigna un CdmEntityContainer a un StorageEntityContainer, en este caso, el contenedor de entidad EmployeeSkills para el objeto de base de datos dbo.

Observe que los nombres asignados a StorageEntityContainer y CdmEntityContainer no están certificados mediante espacios de nombres de esquema. StorageEntityContainer y CdmEntityContainer son diferentes e independientes del elemento de esquema tanto en el esquema conceptual como en los metadatos de almacenamiento. El uso de un nombre de espacio de nombres para certificar un nombre StorageEntityContainer y CdmEntityContainer provocará una excepción de asignación.

Después de la asignación de ****73989bdc-15ed-4045-bbdc-56ff4838230f y CdmEntityContainer, EntitySetMapping especifica StoreEntitySet que corresponde al

TypeName conceptual, Employees.

Las propiedades de TypeName se asignan mediante elementos ScalarProperty como los atributos Name correspondientes a elementos ColumnName, por ejemplo, Name="EmployeeId" ColumnName="EmployeeId". La sintaxis de Name especifica una propiedad de una entidad en el esquema conceptual y ColumnName especifica una columna de la tabla de datos Employees de la base de datos de destino.

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

Vea también

Conceptos

Implementar asociaciones (EDM)

Otros recursos

Especificación de asignaciones y esquemas (Entity Framework)
Especificaciones del EDM