Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las entidades y asociaciones del Entity Data Model (EDM) son las especificaciones formales para los objetos programables del código de una aplicación. Con o sin datos, las entidades y asociaciones se declaran en la sintaxis del lenguaje de definición de esquemas conceptuales (CSDL). Escribir un esquema CSDL normalmente es el primer paso en el diseño de una aplicación generada en el EDM.
La aplicación del EDM demostrada en este tema y en otros contiguos utiliza los datos existentes en la base de datos de ejemplo Northwind, con lo que el modelo de almacenamiento ya está implementado. El uso de los datos en esta aplicación requiere poner atención en la estructura de las tablas existentes al definir los tipos de entidad y las asociaciones en el dominio de la aplicación.
La implementación incluye especificaciones conceptuales, metadatos de almacenamiento, la especificación de una asignación y código de la aplicación con el modelo de objetos generado a partir de los esquemas y especificaciones de la asignación.
El ejemplo de esquema de esta sección define cuatro entidades y dos asociaciones. Los tipos de entidad definidos se derivan de los esquemas de la clase base instalados con ADO.NET. Para obtener información general de los esquemas y la asignación, vea Especificación de asignaciones y esquemas (Entity Framework).
En el ejemplo siguiente, la etiqueta <Schema> de apertura contiene una declaración del espacio de nombres que se define: NorthwindLib. El espacio de nombres tiene un alias, Self, que se utiliza como identificador corto en el texto del esquema. Las direcciones URL en la etiqueta <Schema> de apertura son las mismas en todas las aplicaciones del EDM.
Las etiquetas <Documentation> incluyen información útil para los programadores. El texto entre las etiquetas de documentación es más que un comentario de código; una vez generada la biblioteca de objetos, la información aparece en el explorador de objetos en Visual Studio y en otras herramientas que se utilizan para explorar las clases. En este ejemplo, el texto identifica el esquema definido en este archivo XML.
Tres entidades de este ejemplo se definen dentro de las etiquetas <EntityType>. Cada entidad incluye un atributo Key que indica la propiedad de la entidad que es el identificador único para las instancias de este tipo. Las propiedades Name y End Role que proporcionan el ámbito para los tipos relacionados por las asociaciones especifican dos tipos <Association>. En este ejemplo, una propiedad de navegación y una asociación conectan las instancias de la entidad Product con las entidades Category con las que se relacionan lógicamente. Otra asociación conecta las instancias de Order con las instancias de Customers que realiza los pedidos. Para obtener más información acerca de las asociaciones, vea Relaciones del 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>
Las etiquetas que se usan con frecuencia en este esquema son las etiquetas <Property>. Las propiedades especifican las diversas clases de datos que cada <EntityType> contiene. Por ejemplo, entre las propiedades de un Product se incluyen las siguientes: el ProductID, ProductName, UnitPrice y NavigationProperty denominada Category que relaciona este producto con un conjunto de productos similares. Este grupo de propiedades define la entidad Product.
Las etiquetas <EntityContainer> de EDM especifican un contenedor que se asignará a un objeto de la base de datos (dbo) en el esquema de metadatos de almacenamiento. En <EntityContainer>, hay tres especificaciones de <EntitySet> y dos especificaciones de <AssociationSet>.
Para obtener más información acerca de la sintaxis de XML que se usa en este archivo CSDL, vea Esquemas EDM. Para obtener información acerca de las propiedades de navegación, vea Implementar asociaciones (EDM).
Vea también
Conceptos
Tipos del Entity Data Model
Relaciones del Entity Data Model
Esquemas EDM
Implementar asociaciones (EDM)
Otros recursos
Especificación de asignaciones y esquemas (Entity Framework)