Conceptos clave de Entity Data Model

Entity Data Model (EDM) utiliza tres conceptos clave para describir la estructura de los datos: tipo de entidad, tipo de asociación y propiedad. Estos son los conceptos más importantes para describir la estructura de datos en cualquier implementación de EDM.

Tipo de entidad

El tipo de entidad es la unidad de creación fundamental para describir la estructura de los datos con Entity Data Model. En un modelo conceptual, los tipos de entidad se construyen a partir de las propiedades y describen la estructura de conceptos de nivel superior, como clientes y pedidos en una aplicación empresarial. Del mismo modo que una definición de clase en un programa es una plantilla para las instancias de la clase, un tipo de entidad es una plantilla para las entidades. Una entidad representa un objeto concreto (como un cliente o pedido concreto). Cada entidad debe tener una clave de entidad única dentro de un conjunto de entidades. Un conjunto de entidades es una colección de instancias de un tipo de entidad concreto. Los conjuntos de entidades (y los conjuntos de asociaciones) se agrupan de manera lógica en un contenedor de entidades.

Los tipos de entidad admiten la herencia: es decir, un tipo de entidad se puede derivar de otro. Para más información, consulte Entity Data Model: Herencia.

Tipo de asociación

El tipo de asociación (también denominado asociación) es la unidad de creación fundamental para la descripción de las relaciones en Entity Data Model (EDM). En un modelo conceptual, una asociación representa una relación entre dos tipos de entidad (como Customer y Order). Cada asociación tiene dos extremos de la asociación que especifican los tipos de entidad implicados en ella. Cada extremo de la asociación también especifica una multiplicidad de extremo de asociación que indica el número de entidades que pueden estar en ese extremo de la asociación. La multiplicidad de extremo de asociación puede tener el valor uno (1), cero o uno (0..1), o muchos (*). Es posible acceder a las entidades situadas en un extremo de una asociación mediante las propiedades de navegación o las claves externas, si estas se exponen en un tipo de entidad. Para más información, consulte foreign key property.

En una aplicación, una instancia de una asociación representa una asociación concreta (como por ejemplo una asociación entre una instancia Customer y una instancia Order). Las instancias de asociación se agrupan de manera lógica en un conjunto de asociaciones. Los conjuntos de asociaciones (y los conjuntos de entidades) se agrupan de manera lógica en un contenedor de entidades.

Propiedad

Los tipos de entidad contienen propiedades que definen su estructura y sus características. Por ejemplo, un tipo de entidad Customer puede tener propiedades como CustomerId, Name y Address.

Las propiedades en un modelo conceptual son análogas a las propiedades definidas en una clase en un programa. Del mismo modo que las propiedades en una clase definen la forma de la clase y proporcionan información sobre los objetos, las propiedades en un modelo conceptual definen la forma de un tipo de entidad y proporcionan información sobre las instancias del tipo de entidad.

Una propiedad puede contener datos primitivos (como una cadena, un entero o un valor booleano) o estructura los datos (como un tipo complejo). Para más información, consulte Entity Data Model: tipos de datos primitivos.

Representaciones de un modelo conceptual

Un modelo conceptual es una representación concreta de la estructura de algunos datos como entidades y relaciones. Una manera de representar un modelo conceptual es con un diagrama. El siguiente diagrama representa un modelo conceptual con tres tipos de entidad (Book, Publisher y Author) y dos asociaciones (PublishedBy y WrittenBy):

Diagram showing a conceptual model with three entity types.

Esta representación, sin embargo, tiene algunas limitaciones a la hora de representar algunos detalles acerca del modelo. Por ejemplo, la información sobre el tipo de propiedad y el conjunto de entidades no se representa en el diagrama. La riqueza de un modelo conceptual se puede representar con mayor claridad mediante un lenguaje específico de dominio (ADSL). ADO.NET Entity Framework utiliza un DSL basado en XML denominado lenguaje de definición de esquemas conceptuales (CSDL) para definir los modelos conceptuales. A continuación se muestra la definición CSDL del modelo conceptual del diagrama anterior:

  <Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
          xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
          xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
          Namespace="BooksModel" Alias="Self">
    <EntityContainer Name="BooksContainer" >
      <EntitySet Name="Books" EntityType="BooksModel.Book" />
      <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
      <EntitySet Name="Authors" EntityType="BooksModel.Author" />
      <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Publisher" EntitySet="Publishers" />
      </AssociationSet>
      <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Author" EntitySet="Authors" />
      </AssociationSet>
    </EntityContainer>
    <EntityType Name="Book">
      <Key>
        <PropertyRef Name="ISBN" />
      </Key>
      <Property Type="String" Name="ISBN" Nullable="false" />
      <Property Type="String" Name="Title" Nullable="false" />
      <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
      <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                          FromRole="Book" ToRole="Publisher" />
      <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                          FromRole="Book" ToRole="Author" />
    </EntityType>
    <EntityType Name="Publisher">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                          FromRole="Publisher" ToRole="Book" />
    </EntityType>
    <EntityType Name="Author">
      <Key>
        <PropertyRef Name="Name" />
        <PropertyRef Name="Address" />
      </Key>
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                          FromRole="Author" ToRole="Book" />
    </EntityType>
<Association Name="PublishedBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
    </Association>
    <Association Name="WrittenBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
    </Association>
  </Schema>

Consulte también