Especificación CSDL

El lenguaje de definición de esquemas conceptuales (CSDL) es un lenguaje basado en XML que describe las entidades, las relaciones y las funciones que conforman un modelo conceptual de una aplicación controlada por datos. Entity Framework o Servicios de datos de WCF pueden usar este modelo conceptual. Entity Framework usa los metadatos descritos con CSDL para asignar entidades y relaciones definidas en un modelo conceptual a un origen de datos. Para obtener más información, consulte Especificación SSDL y Especificación MSL.

CSDL es la implementación de Entity Framework de Entity Data Model.

En una aplicación de Entity Framework, los metadatos del modelo conceptual se cargan desde un archivo .csdl (escrito en CSDL) en una instancia de System.Data.Metadata.Edm.EdmItemCollection y son accesibles mediante métodos de la clase System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework usa los metadatos del modelo conceptual para trasladar las consultas realizadas en dicho modelo a comandos específicos del origen de datos.

EF Designer almacena la información sobre el modelo conceptual en un archivo .edmx en tiempo de diseño. EF Designer usa la información de un archivo .edmx en tiempo de compilación para crear el archivo .csdl que Entity Framework necesita en tiempo de ejecución.

Las versiones de CSDL se diferencian por los espacios de nombres XML.

Versión de CSDL Espacio de nombres XML
CSDL v1 https://schemas.microsoft.com/ado/2006/04/edm
CSDL v2 https://schemas.microsoft.com/ado/2008/09/edm
CSDL v3 https://schemas.microsoft.com/ado/2009/11/edm

 

Association (Elemento) (CSDL)

Un elemento Association define una relación entre dos tipos de entidad. Una asociación debe especificar los tipos de entidad que están implicados en la relación y el posible número de tipos de entidad en cada extremo de la relación, que se conoce como multiplicidad. La multiplicidad de un extremo de asociación puede tener el valor uno (1), cero o uno (0..1), o muchos (*). Esta información se especifica en dos elementos End secundarios.

Es posible obtener acceso a las instancias de tipo de entidad situadas en un extremo de la asociación a través de las propiedades de navegación o las claves externas, si estas se exponen en un tipo de entidad.

En una aplicación, una instancia de una asociación representa una asociación concreta entre las instancias de tipos de entidad. Las instancias de asociación se agrupan de manera lógica en un conjunto de asociaciones.

Un elemento Association puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • End (exactamente 2 elementos)
  • ReferentialConstraint (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Association.

Nombre del atributo Es obligatorio Valor
Nombre Nombre de la asociación.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Association. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento Association que define la asociación CustomerOrders cuando las claves externas no se han expuesto en los tipos de entidad Customer y Order. Los valores Multiplicity de cada End de la asociación indican que muchos de los objetos Order se pueden asociar a Customer, pero solo un objeto Customer se puede asociar a un elemento Order. Además, el elemento OnDelete indica que todos los objetos Order que están relacionados con un determinado objeto Customer y que se han cargado en ObjectContext se eliminarán en caso de eliminarse Customer.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

En el ejemplo siguiente se muestra un elemento Association que define la asociación CustomerOrders cuando las claves externas se han expuesto en los tipos de entidad Customer y Order. Con claves externas expuestas, la relación entre las entidades se administra con un elemento ReferentialConstraint. No es necesario un elemento AssociationSetMapping correspondiente para asignar esta asociación al origen de datos.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
   <ReferentialConstraint>
        <Principal Role="Customer">
            <PropertyRef Name="Id" />
        </Principal>
        <Dependent Role="Order">
             <PropertyRef Name="CustomerId" />
         </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

AssociationSet (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento AssociationSet es un contenedor lógico para instancias de asociación del mismo tipo. Un conjunto de asociaciones proporciona una definición para agrupar las instancias de la asociación con objeto de que se puedan asignar a un origen de datos.  

El elemento AssociationSet puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento permitido)
  • End (se requieren exactamente dos elementos)
  • Elementos Annotation (cero o más elementos permitidos)

El atributo Association especifica el tipo de asociación que contiene un conjunto de asociaciones. Los conjuntos de entidades que constituyen los extremos de un conjunto de asociaciones se especifican exactamente con dos elementos End secundarios.

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento AssociationSet.

Nombre del atributo Es obligatorio Valor
Nombre Nombre del conjunto de entidades. El valor del atributo Name no puede coincidir con el del atributo Association.
Asociación Nombre completo de la asociación cuyas instancias contiene el conjunto de asociaciones. La asociación debe estar en el mismo espacio de nombres que el conjunto de asociaciones.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento AssociationSet. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityContainer con dos elementos AssociationSet asociados:

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

 

 

CollectionType (Elemento de CSDL)

El elemento CollectionType en el lenguaje de definición de esquemas conceptuales (CSDL) especifica que un parámetro de función o el tipo de valor devuelto de la función es una colección. El elemento CollectionType puede ser un elemento secundario del elemento Parameter o del elemento ReturnType (Function). El tipo de colección se puede especificar con el atributo Type o con uno de los elementos secundarios siguientes:

  • CollectionType
  • ReferenceType
  • RowType
  • TypeRef

Nota:

Un modelo no se valida si el tipo de una colección se especifica con el atributo Type y un elemento secundario.

 

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento CollectionType. Tenga en cuenta que los atributos DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode y Collation solo se aplican a las colecciones de EDMSimpleTypes.

Nombre del atributo Es obligatorio Valor
Tipo No Tipo de la colección.
Admisión de valores NULL No True (el valor predeterminado) o False, según si la propiedad puede tener un valor nulo.
[!NOTE]
> En CSDL v1, una propiedad de tipo complejo debe tener Nullable="False".
DefaultValue No Valor predeterminado de la propiedad.
MaxLength No La longitud máxima del valor de la propiedad.
FixedLength No True o False en función de si el valor de propiedad se va a almacenar como una cadena de longitud fija.
Precisión No Precisión del valor de propiedad.
Escala No Escala del valor de propiedad.
SRID No Identificador de referencia del sistema espacial. Válido solo para las propiedades de los tipos espaciales.   Para obtener más información, consulte SRID y SRID (SQL Server)
Unicode No True o False en función de si el valor de propiedad se va a almacenar como una cadena Unicode.
Intercalación No Cadena que especifica la secuencia de intercalación que se usará en el origen de datos.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento CollectionType. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra una función definida por modelo que utiliza un elemento CollectionType para especificar que la función devuelve una colección de tipos de entidad Person (tal y como se especifica con el atributo ElementType).

 <Function Name="LastNamesAfter">
        <Parameter Name="someString" Type="Edm.String"/>
        <ReturnType>
             <CollectionType  ElementType="SchoolModel.Person"/>
        </ReturnType>
        <DefiningExpression>
             SELECT VALUE p
             FROM SchoolEntities.People AS p
             WHERE p.LastName >= someString
        </DefiningExpression>
 </Function>

 

En el ejemplo siguiente se muestra una función definida por modelo que utiliza un elemento CollectionType para especificar que la función devuelve una colección de filas (tal y como se especifica en el elemento RowType).

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

En el ejemplo siguiente se muestra una función definida por modelo que utiliza el elemento CollectionType para especificar que la función acepta como parámetro una colección de tipos de entidad Department.

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

ComplexType (Elemento) (CSDL)

Un elemento ComplexType define una estructura de datos compuesta por propiedades EdmSimpleType u otros tipos complejos.  Un tipo complejo puede ser una propiedad de un tipo de entidad o de otro tipo complejo. Un tipo complejo se parece a un tipo de entidad en que también define datos. Sin embargo, existen algunas diferencias clave entre los tipos complejos y los tipos de entidad:

  • Los tipos complejos no tienen identidades (o claves) y, por consiguiente, no pueden existir de forma independiente. Los tipos complejos solo pueden existir como propiedades de tipos de entidad u otros tipos complejos.
  • Los tipos complejos no pueden participar en asociaciones. Los extremos de una asociación no pueden ser tipos complejos y, por consiguiente, no se pueden definir propiedades de navegación para tipos complejos.
  • Una propiedad de tipo complejo no puede tener un valor nulo, aunque las propiedades escalares de un tipo complejo se pueden establecer cada una con el valor nulo.

Un elemento ComplexType puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Property (cero o más elementos)
  • Elementos Annotation (cero o más elementos)

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento ComplexType.

Nombre del atributo Es obligatorio Valor
Nombre El nombre del tipo complejo. El nombre de un tipo complejo no puede ser igual que el nombre de otro tipo complejo, tipo de entidad o asociación que esté dentro del ámbito del modelo.
BaseType No El nombre de otro tipo complejo que es el tipo base del tipo complejo que se define.
[!NOTE]
> Este atributo no es aplicable en CSDL v1. La herencia de los tipos complejos no se admite en esa versión.
Descripción breve No True o False (el valor predeterminado), en función de si el tipo complejo es un tipo abstracto.
[!NOTE]
> Este atributo no es aplicable en CSDL v1. Los tipos complejos de esa versión no pueden ser tipos abstractos.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento ComplexType. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un tipo complejo, Address, con las propiedades de EdmSimpleTypeStreetAddress, City, StateOrProvince, Country y PostalCode.

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Para definir el tipo complejo Address (anterior) como una propiedad de un tipo de entidad, debe declarar el tipo de propiedad en la definición del tipo de entidad. En el ejemplo siguiente se muestra la propiedad Address como tipo complejo en un tipo de entidad (Publisher):

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BooksModel.Address" Name="Address" Nullable="false" />
       <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                           FromRole="Publisher" ToRole="Book" />
     </EntityType>

 

 

DefiningExpression (Elemento) (CSDL)

El elemento DefiningExpression en el lenguaje de definición de esquemas conceptuales (CSDL) contiene una expresión Entity SQL que define una función en el modelo conceptual.  

Nota:

Para fines de validación, un elemento DefiningExpression puede incluir contenido arbitrario. Sin embargo, Entity Framework producirá una excepción en tiempo de ejecución si un elemento DefiningExpression no contiene Entity SQL válido.

 

Atributos aplicables

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento DefiningExpression. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se utiliza un elemento DefiningExpression para definir una función que devuelve el número de años transcurridos desde que se publicó un libro. El contenido del elemento DefiningExpression está escrito en Entity SQL.

 <Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
       <Parameter Name="book" Type="BooksModel.Book" />
       <DefiningExpression>
         Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
       </DefiningExpression>
     </Function>

 

 

Dependent (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento Dependent es un elemento secundario del elemento ReferentialConstraint y define el extremo dependiente de una restricción referencial. Un elemento ReferentialConstraint define una funcionalidad similar a una restricción de integridad referencial en una base de datos relacional. Del mismo modo que las columnas de una tabla de base de datos pueden hacer referencia a la clave principal de otra tabla, las propiedades de un tipo de entidad pueden hacer referencia a la clave de entidad de otro tipo de entidad. El tipo de entidad al que se hace referencia se denomina extremo principal de la restricción. El tipo de entidad que hace referencia al extremo principal se denomina extremo dependiente de la restricción. Se usan elementos PropertyRef para especificar qué claves hacen referencia al extremo principal.

El elemento Dependent puede tener los elementos secundarios siguientes, en el orden mostrado:

  • PropertyRef (uno o varios elementos)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Dependent.

Nombre del atributo Es obligatorio Valor
Rol Nombre del tipo de entidad del extremo dependiente de la asociación.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Dependent. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento ReferentialConstraint que se usa como parte de la definición de la asociación PublishedBy. La propiedad PublisherId del tipo de entidad Book constituye el extremo dependiente de la restricción referencial.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Documentation (Elemento) (CSDL)

El elemento Documentation del lenguaje de definición de esquemas conceptuales (CSDL) se puede usar para proporcionar información sobre un objeto definido en un elemento primario. En un archivo .edmx, si el elemento Documentation es un elemento secundario de un elemento que aparece como objeto en la superficie de diseño de EF Designer (por ejemplo, una entidad, asociación o propiedad), el contenido del elemento Documentation aparecerá en la ventana Propiedades de Visual Studio para el objeto.

El elemento Documentation puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Summary: una descripción breve del elemento principal. (cero o un elemento).
  • LongDescription: una descripción extensa del elemento principal. (cero o un elemento).
  • Elementos Annotation. (cero o más elementos).

Atributos aplicables

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Documentation. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra el elemento Documentation como elemento secundario de un elemento EntityType. Si el fragmento de código siguiente estuviera en el contenido CSDL de un archivo .edmx, el contenido de los elementos Summary y LongDescription aparecería en la ventana Propiedades de Visual Studio al hacer clic en el tipo de entidad Customer.

 <EntityType Name="Customer">
    <Documentation>
      <Summary>Summary here.</Summary>
      <LongDescription>Long description here.</LongDescription>
    </Documentation>
    <Key>
      <PropertyRef Name="CustomerId" />
    </Key>
    <Property Type="Int32" Name="CustomerId" Nullable="false" />
    <Property Type="String" Name="Name" Nullable="false" />
 </EntityType>

 

 

End (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento End puede ser un elemento secundario del elemento Association o del elemento AssociationSet. En cada uno de los casos, el rol del elemento End, así como los atributos aplicables, son diferentes.

Elemento End como elemento secundario del elemento Association

Un elemento End (como elemento secundario del elemento Association) identifica el tipo de entidad existente en un extremo de una asociación, así como el número de instancias de tipo de entidad que pueden existir en dicho extremo. Los extremos de asociación se definen como parte de una asociación, y esta debe tener exactamente dos extremos. Es posible acceder a las instancias de tipo de entidad situadas en un extremo de la asociación mediante las propiedades de navegación o las claves externas, si estas se exponen en un tipo de entidad.  

Un elemento End puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • OnDelete (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento End cuando es el elemento secundario de un elemento Association.

Nombre del atributo Es obligatorio Valor
Tipo Nombre del tipo de entidad de un extremo de la asociación.
Rol No Nombre para el extremo de la asociación. Si no se proporciona ningún nombre, se usará el nombre del tipo de entidad del extremo de la asociación.
Multiplicidad 1, 0..1 o *, según el número de instancias de tipo de entidad que existan en el extremo de la asociación.
1 indica que existe exactamente una instancia de tipo de entidad en el extremo de la asociación.
0..1 indica que, o bien no existe ninguna instancia de tipo de entidad en el extremo de la asociación, o existe una.
* indica que pueden existir cero, una o varias instancias de tipo de entidad en el extremo de la asociación.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento End. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento Association que define la asociación CustomerOrders. Los valores Multiplicity de cada End de la asociación indican que muchos de los objetos Order se pueden asociar a Customer, pero solo un objeto Customer se puede asociar a un elemento Order. Además, el elemento OnDelete indica que todos los objetos Order que están relacionados con un determinado objeto Customer y que se han cargado en ObjectContext se eliminarán en caso de eliminarse Customer.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
         <OnDelete Action="Cascade" />
   </End>
 </Association>

 

Elemento End como elemento secundario del elemento AssociationSet

El elemento End especifica un extremo de un conjunto de asociaciones. El elemento AssociationSet debe contener dos elementos End. La información contenida en un elemento End se usa para asignar un conjunto de asociaciones a un origen de datos.

Un elemento End puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Nota:

Los elementos de anotación deben aparecer después de todos los demás elementos secundarios. Los elementos Annotation solo se permiten en CSDL v2 y versiones posteriores.

 

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento End cuando es el elemento secundario de un elemento AssociationSet.

Nombre del atributo Es obligatorio Valor
EntitySet Nombre del elemento EntitySet que define un extremo del elemento primario AssociationSet. El elemento EntitySet se debe definir en el mismo contenedor de entidades que el elemento AssociationSet primario.
Rol No Nombre del extremo del conjunto de asociaciones. Si no se usa el atributo Role, el nombre del extremo del conjunto de asociaciones será el nombre del conjunto de entidades.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento End. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityContainer con dos elementos AssociationSet, cada uno con dos elementos End a su vez:

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

 

 

EntityContainer (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento EntityContainer es un contenedor lógico para los conjuntos de entidades, los conjuntos de asociaciones y las importaciones de función. Un contenedor de entidades de modelo conceptual se asigna a un contenedor de entidades de modelo de almacenamiento a través del elemento EntityContainerMapping. Un contenedor de entidades de modelo de almacenamiento describe la estructura de la base de datos: los conjuntos de entidades describen las tablas, los conjuntos de asociaciones describen las restricciones de clave externa y las importaciones de función describen los procedimientos almacenados en una base de datos.

Un elemento EntityContainer puede tener cero elementos Documentation o uno solo. Si hay un elemento Documentation presente, debe preceder a todos los elementos EntitySet, AssociationSet y FunctionImport.

Un elemento EntityContainer puede tener cero o más de los elementos secundarios siguientes, en el orden mostrado:

  • EntitySet
  • AssociationSet
  • FunctionImport
  • Elementos Annotation

Se puede ampliar un elemento EntityContainer para que incluya el contenido de otro elemento EntityContainer que se encuentre dentro del mismo espacio de nombres. Para incluir el contenido de otro elemento EntityContainer, en el elemento EntityContainer que hace referencia, establezca el valor del atributo Extends en el nombre del elemento EntityContainer que quiere incluir. Todos los elementos secundarios del elemento EntityContainer incluido se tratarán como elementos secundarios del elemento EntityContainer que hace referencia.

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Using.

Nombre del atributo Es obligatorio Valor
Nombre Nombre del contenedor de entidades.
Extends No Nombre de otro contenedor de entidades dentro del mismo espacio de nombres.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento EntityContainer. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityContainer que define tres conjuntos de entidades y dos conjuntos de asociaciones.

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

 

 

EntitySet (Elemento) (CSDL)

El elemento EntitySet en el lenguaje de definición de esquemas conceptuales es un contenedor lógico para las instancias de un tipo de entidad y las instancias de cualquier tipo que se derive de ese tipo de entidad. La relación entre un tipo de entidad y un conjunto de entidades es análoga a la relación entre una fila y una tabla en una base de datos relacional. Igual que una fila, un tipo de entidad define un conjunto de datos relacionados y, lo mismo que una tabla, un conjunto de entidades contiene instancias de esa definición. Un conjunto de entidades proporciona una construcción para agrupar las instancias del tipo de entidad para que se pueden asignar a las estructuras de datos relacionadas en un origen de datos.  

Se pueden definir varios conjuntos de entidades para un tipo de entidad determinado.

Nota:

EF Designer no admite modelos conceptuales que contienen varios conjuntos de entidades por tipo.

 

El elemento EntitySet puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Elemento Documentation (cero o un elemento permitido)
  • Elementos Annotation (cero o más elementos permitidos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento EntitySet.

Nombre del atributo Es obligatorio Valor
Nombre Nombre del conjunto de entidades.
EntityType El nombre completo del tipo de entidad para el que el conjunto de entidades contiene las instancias.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento EntitySet. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityContainer con tres elementos EntitySet:

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

 

Es posible definir varios conjuntos de entidades por tipo (MEST). En el ejemplo siguiente se define un contenedor de entidades con dos conjuntos de entidades para el tipo de entidad Book:

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="FictionBooks" 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="BookAuthor" Association="BooksModel.BookAuthor">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

EntityType (Elemento) (CSDL)

El elemento EntityType representa la estructura de un concepto de nivel superior, como puede ser un cliente o un pedido, en un modelo conceptual. Un tipo de entidad es una plantilla para las instancias de los tipos de entidad de una aplicación. Cada plantilla contiene la información siguiente:

  • Un nombre único. (Requerido)
  • Una clave de entidad definida por una o varias propiedades. (Requerido)
  • Propiedades para el almacenamiento de datos. (Opcional).
  • Propiedades de navegación que permiten el desplazamiento de un extremo de una asociación al otro. (Opcional).

En una aplicación, una instancia de un tipo de entidad representa un objeto específico (como un cliente o un pedido concreto). Cada una de las instancias de un tipo de entidad debe tener una clave de entidad única dentro de un conjunto de entidades.

Dos instancias de tipo de entidad se consideran iguales solo si son del mismo tipo y los valores de sus claves de entidad son idénticos.

Un elemento EntityType puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Key (cero o un elemento)
  • Property (cero o más elementos)
  • NavigationProperty (cero o más elementos)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento EntityType.

Nombre del atributo Es obligatorio Valor
Nombre El nombre del tipo de entidad.
BaseType No El nombre de otro tipo de entidad que sea el tipo base del tipo de entidad que se define.
Abstract No True o False, en función de si el tipo de entidad es un tipo abstracto.
OpenType No True o False, en función de si el tipo de entidad es un tipo de entidad abierto.
[!NOTE]
> El atributo OpenType solo se aplica a los tipos de entidad que se definen en los modelos conceptuales que se usan con Data Services de ADO.NET.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento EntityType. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityType con tres elementos Property y dos elementos NavigationProperty:

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

 

 

Elemento EnumType (CSDL)

El elemento EnumType representa un tipo enumerado.

Un elemento EnumType puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Member (cero o más elementos)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento EnumType.

Nombre del atributo Es obligatorio Valor
Nombre El nombre del tipo de entidad.
IsFlags No True o False, en función de si el tipo de enumeración se puede usar como conjunto de marcas. El valor predeterminado es False..
UnderlyingType No Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 o Edm.SByte definen el intervalo de valores del tipo.   El tipo subyacente predeterminado de los elementos de la enumeración es Edm.Int32..

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento EnumType. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EnumType con tres elementos Member:

 <EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
   <Member Name="Red" />
   <Member Name="Green" />
   <Member Name="Blue" />
 </EntityType>

 

 

Function (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento Function se utiliza para definir o declarar las funciones en el modelo conceptual. Una función se define mediante un elemento DefiningExpression.  

Un elemento Function puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Parameter (cero o más elementos)
  • DefiningExpression (cero o un elemento)
  • ReturnType (Function) (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Se debe especificar un tipo de valor devuelto para una función con el elemento ReturnType (Function) o el atributo ReturnType (véase más adelante), pero no con ambos. Los tipos de valores devueltos posibles son EdmSimpleType, tipo de entidad, tipo complejo, tipo de fila o tipo ref (o una colección de uno de estos tipos).

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Function.

Nombre del atributo Es obligatorio Valor
Nombre El nombre de la función.
ReturnType No El tipo devuelto por la función.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Function. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se usa un elemento Function para definir una función que devuelve el número de años transcurridos desde que se contrató a un instructor.

 <Function Name="YearsSince" ReturnType="Edm.Int32">
   <Parameter Name="date" Type="Edm.DateTime" />
   <DefiningExpression>
     Year(CurrentDateTime()) - Year(date)
   </DefiningExpression>
 </Function>

 

 

FunctionImport (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento FunctionImport representa una función que está definida en el origen de datos, pero que está disponible para los objetos a través del modelo conceptual. Por ejemplo, un elemento Function del modelo de almacenamiento se puede usar para representar un procedimiento almacenado en una base de datos. Un elemento FunctionImport del modelo conceptual representa la función correspondiente de una aplicación de Entity Framework y se asigna a la función del modelo de almacenamiento mediante el elemento FunctionImportMapping. Cuando se llama a la función en la aplicación, el procedimiento almacenado correspondiente se ejecuta en la base de datos.

El elemento FunctionImport puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento permitido)
  • Parameter (cero o más elementos permitidos)
  • Elementos Annotation (cero o más elementos permitidos)
  • ReturnType (FunctionImport) (cero o más elementos permitidos)

Se debe definir un elemento Parameter para cada parámetro que acepte la función.

Se debe especificar un tipo de valor devuelto para una función con el elemento ReturnType (FunctionImport) o el atributo ReturnType (véase más adelante), pero no con ambos. El valor del tipo devuelto debe ser una colección de EdmSimpleType, EntityType o ComplexType.

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento FunctionImport.

Nombre del atributo Es obligatorio Valor
Nombre Nombre de la función importada.
ReturnType No Tipo devuelto por la función. No utilice este atributo si la función no devuelve un valor. De lo contrario, el valor debe ser una colección de ComplexType, EntityType o EDMSimpleType.
EntitySet No Si la función devuelve una colección de tipos de entidad, el valor de EntitySet debe ser el conjunto de entidades al que pertenece la colección. De lo contrario, el atributo EntitySet no debe usarse.
IsComposable No Si el valor se establece en true, la función admite composición (función con valores de tabla) y se puede usar en una consulta LINQ.  El valor predeterminado es false.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento FunctionImport. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento FunctionImport que acepta un parámetro y devuelve una colección de tipos de entidad:

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

 

Key (Elemento) (CSDL)

El elemento Key es un elemento secundario del elemento EntityType y define una clave de entidad (una propiedad o un conjunto de propiedades de un tipo de entidad que determinan la identidad). Las propiedades que constituyen una entidad se eligen en tiempo de diseño. Los valores de las propiedades de clave de entidad deben identificar de forma inequívoca en tiempo de ejecución una instancia de tipo de entidad dentro de un conjunto de entidades. Las propiedades que constituyen una clave de entidad se deben elegir de tal forma que garanticen la unicidad de las instancias de un conjunto de entidades. El elemento Key define una clave de entidad al hacer referencia a una o varias de las propiedades de un tipo de entidad.

El elemento Key puede tener los siguientes elementos secundarios:

  • PropertyRef (uno o varios elementos)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Key. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

El ejemplo siguiente define un tipo de entidad denominado Book. La clave de entidad se define al hacer referencia a la propiedad ISBN del tipo de entidad.

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

 

La propiedad ISBN es una opción adecuada para la clave de entidad, ya que el número internacional normalizado de libros (ISBN) permite identificar un libro de manera inequívoca.

En el ejemplo siguiente se muestra un tipo de entidad (Author) que tiene una clave de entidad que consta de dos propiedades, Name y Address.

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

 

El uso de Name y Address para la clave de entidad es una opción razonable, ya que no es probable que dos autores con el mismo nombre vivan en la misma dirección. Sin embargo, esta opción no garantiza por completo la existencia de claves de entidad únicas en un conjunto de entidades. En este caso, se recomienda agregar una propiedad, como AuthorId, que se podría usar para identificar a un autor de forma inequívoca.

 

Elemento Member (CSDL)

El elemento Member es un elemento secundario del elemento EnumType y define un miembro del tipo enumerado.

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento FunctionImport.

Nombre del atributo Es obligatorio Valor
Nombre Nombre del miembro.
Valor No Valor del miembro. De manera predeterminada, el primer miembro tiene el valor 0 y el valor de cada enumerador sucesivo se incrementa en 1. Pueden existir varios miembros con los mismos valores.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento FunctionImport. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EnumType con tres elementos Member:

 <EnumType Name="Color">
   <Member Name="Red" Value=”1”/>
   <Member Name="Green" Value=”3” />
   <Member Name="Blue" Value=”5”/>
 </EntityType>

 

 

Un elemento NavigationProperty define una propiedad de navegación que, a su vez, proporciona una referencia al otro extremo de una asociación. A diferencia de las propiedades definidas con el elemento Property, las propiedades de navegación no definen la forma ni las características de los datos. Proporcionan una manera de desplazarse por una asociación entre dos tipos de entidad.

Las propiedades de navegación son opcionales en los dos tipos de entidad de los extremos de una asociación. Si define una propiedad de navegación en un tipo de entidad del extremo de una asociación, no tiene que definir una propiedad de navegación en el tipo de entidad del otro extremo de la asociación.

El tipo de datos devuelto por una propiedad de navegación viene determinado por la multiplicidad de su extremo remoto de la asociación. Por ejemplo, supongamos que existe una propiedad de navegación, OrdersNavProp, en un tipo de entidad Customer y navega a una asociación de uno a varios entre Customer y Order. Dado que el extremo remoto de la asociación para la propiedad de navegación tiene la multiplicidad de muchos (*), su tipo de datos es una colección (de Order). Del mismo modo, si existe una propiedad de navegación, CustomerNavProp, en el tipo de entidad Order, su tipo de datos sería Customer porque la multiplicidad del extremo remoto es uno (1).

Un elemento NavigationProperty puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento NavigationProperty.

Nombre del atributo Es obligatorio Valor
Nombre El nombre de la propiedad de navegación.
Relación Nombre de una asociación que se encuentra dentro del ámbito del modelo.
ToRole Extremo de la asociación en el que finaliza la navegación. El valor del atributo ToRole debe coincidir con el valor de uno de los atributos Role definidos en uno de los extremos de la asociación (que se define en el elemento AssociationEnd).
FromRole Extremo de la asociación desde el que comienza la navegación. El valor del atributo FromRole debe coincidir con el valor de uno de los atributos Role definidos en uno de los extremos de la asociación (que se define en el elemento AssociationEnd).

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento NavigationProperty. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se define un tipo de entidad (Book) con dos propiedades de navegación (PublishedBy y WrittenBy):

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

 

 

OnDelete (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento OnDelete define un comportamiento que está conectado con una asociación. Si el atributo Action se establece en Cascade en un extremo de una asociación, se eliminan los tipos de entidad relacionados del otro extremo de la asociación al eliminar el tipo de entidad del primer extremo. Si la asociación entre dos tipos de entidad es una relación de clave principal a clave principal, al eliminar el objeto principal del otro extremo de la asociación se eliminará un objeto dependiente cargado, independientemente de la especificación OnDelete.  

Nota:

El elemento OnDelete solo afecta al comportamiento en tiempo de ejecución de una aplicación; no afecta al comportamiento en el origen de datos. El comportamiento definido en el origen de datos debe ser igual que el definido en la aplicación.

 

Un elemento OnDelete puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento OnDelete.

Nombre del atributo Es obligatorio Valor
Acción Cascade o None. Si el valor es Cascade, se eliminarán los tipos de entidad dependientes al eliminar el tipo de entidad de seguridad. Si el valor es None, no se eliminarán los tipos de entidad dependientes al eliminar el tipo de entidad de seguridad.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Association. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento Association que define la asociación CustomerOrders. El elemento OnDelete indica que todos los objetos Order relacionados con un determinado objeto Customer y que se han cargado en ObjectContext se eliminarán al eliminar Customer.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

 

Parameter (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento Parameter puede ser un elemento secundario del elemento FunctionImport o del elemento Function.

Aplicación para el elemento FunctionImport

El elemento Parameter (como elemento secundario del elemento FunctionImport) se usa para definir los parámetros de entrada y de salida de las importaciones de funciones declaradas en CSDL.

El elemento Parameter puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento permitido)
  • Elementos Annotation (cero o más elementos permitidos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Parameter.

Nombre del atributo Es obligatorio Valor
Nombre El nombre del parámetro.
Tipo El tipo de parámetro. El valor tiene que ser un tipo EDMSimpleType o un tipo complejo que se encuentre dentro del ámbito del modelo.
Modo No In, Out o InOut en función de si el parámetro es de entrada, de salida o de entrada/salida.
MaxLength No La longitud máxima permitida del parámetro.
Precisión No La precisión del parámetro.
Escala No La escala del parámetro.
SRID No Identificador de referencia del sistema espacial. Válido solo para los parámetros de los tipos espaciales. Para obtener más información, consulte SRID y SRID (SQL Server).

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Parameter. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento FunctionImport con un elemento secundario Parameter. La función acepta un parámetro de entrada y devuelve una colección de tipos de entidad.

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

Aplicación para el elemento Function

Un elemento Parameter (como elemento secundario del elemento Function) define los parámetros para las funciones que se definen o se declaran en un modelo conceptual.

El elemento Parameter puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • CollectionType (cero o un elemento)
  • ReferenceType (cero o un elemento)
  • RowType (cero o un elemento)

Nota:

Solo uno de los elementos CollectionType, ReferenceType o RowType puede ser un elemento secundario de un elemento Property.

 

  • Elementos Annotation (cero o más elementos permitidos)

Nota:

Los elementos de anotación deben aparecer después de todos los demás elementos secundarios. Los elementos Annotation solo se permiten en CSDL v2 y versiones posteriores.

 

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Parameter.

Nombre del atributo Es obligatorio Valor
Nombre El nombre del parámetro.
Tipo No El tipo de parámetro. Un parámetro puede ser de cualquiera de los siguientes tipos (o colecciones de estos tipos):
EdmSimpleType
tipo de entidad
tipo complejo
tipo de fila
tipo de referencia
Admisión de valores NULL No True (el valor predeterminado) o False, en función de si la propiedad puede tener un valor NULL.
DefaultValue No Valor predeterminado de la propiedad.
MaxLength No La longitud máxima del valor de la propiedad.
FixedLength No True o False en función de si el valor de propiedad se va a almacenar como una cadena de longitud fija.
Precisión No Precisión del valor de propiedad.
Escala No Escala del valor de propiedad.
SRID No Identificador de referencia del sistema espacial. Válido solo para las propiedades de los tipos espaciales. Para obtener más información, consulte SRID y SRID (SQL Server).
Unicode No True o False en función de si el valor de propiedad se va a almacenar como una cadena Unicode.
Intercalación No Cadena que especifica la secuencia de intercalación que se usará en el origen de datos.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Parameter. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento Function que usa un elemento secundario Parameter para definir un parámetro de una función.

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
 <Parameter Name="Instructor" Type="SchoolModel.Person" />
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

Principal (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento Principal es un elemento secundario del elemento ReferentialConstraint y define el extremo principal de una restricción referencial. Un elemento ReferentialConstraint define una funcionalidad similar a una restricción de integridad referencial en una base de datos relacional. Del mismo modo que las columnas de una tabla de base de datos pueden hacer referencia a la clave principal de otra tabla, las propiedades de un tipo de entidad pueden hacer referencia a la clave de entidad de otro tipo de entidad. El tipo de entidad al que se hace referencia se denomina extremo principal de la restricción. El tipo de entidad que hace referencia al extremo principal se denomina extremo dependiente de la restricción. Los elementos PropertyRef se utilizan para especificar a qué claves hace referencia el extremo dependiente.

El elemento Principal puede tener los elementos secundarios siguientes, en el orden mostrado:

  • PropertyRef (uno o varios elementos)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Principal.

Nombre del atributo Es obligatorio Valor
Rol Nombre del tipo de entidad del extremo principal de la asociación.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Principal. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento ReferentialConstraint que forma parte de la definición de la asociación PublishedBy. La propiedad Id del tipo de entidad Publisher constituye el extremo principal de la restricción referencial.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Property (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento Property puede ser un elemento secundario del elemento EntityType, el elemento ComplexType o el elemento RowType.

Aplicaciones de elemento EntityType y ComplexType

Los elementos Property (como elementos secundarios de los elementos EntityType o ComplexType) definen la forma y características de los datos que contendrá una instancia de tipo de entidad o de tipo complejo. Las propiedades en un modelo conceptual son análogas a las propiedades que se definen en una clase. 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.

El elemento Property puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Elemento Documentation (cero o un elemento permitido)
  • Elementos Annotation (cero o más elementos permitidos)

Las siguientes facetas se pueden aplicar a un elemento Property: Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode. Las facetas son atributos XML que proporcionan información sobre cómo los valores de propiedad se almacenan en el almacén de datos.

Nota:

Las facetas solo se aplican a las propiedades de tipo EDMSimpleType.

 

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Property.

Nombre del atributo Es obligatorio Valor
Nombre El nombre de la propiedad.
Tipo El tipo de valor de la propiedad. El tipo de valor de la propiedad debe ser un tipo EDMSimpleType o un tipo complejo (indicado mediante un nombre completo) que se encuentre dentro del ámbito del modelo.
Admisión de valores NULL No True (el valor predeterminado) o False, según si la propiedad puede tener un valor nulo.
[!NOTE]
> En CSDL v1, una propiedad de tipo complejo debe tener Nullable="False".
DefaultValue No Valor predeterminado de la propiedad.
MaxLength No La longitud máxima del valor de la propiedad.
FixedLength No True o False en función de si el valor de propiedad se va a almacenar como una cadena de longitud fija.
Precisión No Precisión del valor de propiedad.
Escala No Escala del valor de propiedad.
SRID No Identificador de referencia del sistema espacial. Válido solo para las propiedades de los tipos espaciales. Para obtener más información, consulte SRID y SRID (SQL Server).
Unicode No True o False en función de si el valor de propiedad se va a almacenar como una cadena Unicode.
Intercalación No Cadena que especifica la secuencia de intercalación que se usará en el origen de datos.
ConcurrencyMode No None (el valor predeterminado) o Fixed. Si el valor se establece en Fixed, el valor de la propiedad se usará en las comprobaciones de simultaneidad optimista.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Property. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityType con tres elementos Property:

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

 

En el ejemplo siguiente se muestra un elemento ComplexType con cinco elementos Property:

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Aplicación de elemento RowType

Los elementos Property (como elementos secundarios de un elemento RowType) definen la forma y características de los datos que se pueden pasar o devolver de una función definida por modelo.  

El elemento Property puede tener exactamente uno de los siguientes elementos secundarios:

  • CollectionType
  • ReferenceType
  • RowType

El elemento Property puede tener cualquier número de elementos de anotación secundarios.

Nota:

Los elementos Annotation solo se permiten en CSDL v2 y versiones posteriores.

 

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Property.

Nombre del atributo Es obligatorio Valor
Nombre El nombre de la propiedad.
Tipo El tipo de valor de la propiedad.
Admisión de valores NULL No True (el valor predeterminado) o False, según si la propiedad puede tener un valor nulo.
[!NOTE]
> En CSDL v1, una propiedad de tipo complejo debe tener Nullable="False".
DefaultValue No Valor predeterminado de la propiedad.
MaxLength No La longitud máxima del valor de la propiedad.
FixedLength No True o False en función de si el valor de propiedad se va a almacenar como una cadena de longitud fija.
Precisión No Precisión del valor de propiedad.
Escala No Escala del valor de propiedad.
SRID No Identificador de referencia del sistema espacial. Válido solo para las propiedades de los tipos espaciales. Para obtener más información, consulte SRID y SRID (SQL Server).
Unicode No True o False en función de si el valor de propiedad se va a almacenar como una cadena Unicode.
Intercalación No Cadena que especifica la secuencia de intercalación que se usará en el origen de datos.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Property. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestran los elementos Property usados para definir la forma del tipo de valor devuelto de una función definida por modelo.

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

 

PropertyRef (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento PropertyRef hace referencia a una propiedad de un tipo de entidad para indicar que dicha propiedad realizará uno de los roles siguientes:

  • Parte de la clave de la entidad (una propiedad o un conjunto de propiedades de un tipo de entidad que determinan la identidad). Se pueden usar uno o varios elementos PropertyRef para definir una clave de entidad.
  • El extremo dependiente o principal de una restricción referencial.

El elemento PropertyRef solo puede tener elementos de anotación (cero o más) como elementos secundarios.

Nota:

Los elementos Annotation solo se permiten en CSDL v2 y versiones posteriores.

 

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento PropertyRef.

Nombre del atributo Es obligatorio Valor
Nombre Nombre de la propiedad a la que se hace referencia.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento PropertyRef. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

El ejemplo siguiente define un tipo de entidad (Book). La clave de entidad se define al hacer referencia a la propiedad ISBN del tipo de entidad.

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

 

En el ejemplo siguiente, se usan dos elementos PropertyRef para indicar que dos propiedades (Id y PublisherId) son los extremos principal y dependiente de una restricción referencial.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

ReferenceType (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento ReferenceType especifica una referencia a un tipo de entidad. El elemento ReferenceType puede ser un secundario de los elementos siguientes:

  • ReturnType (Function)
  • Parámetro
  • CollectionType

El elemento ReferenceType se usa al definir un parámetro o un tipo de valor devuelto para una función.

Un elemento ReferenceType puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento ReferenceType.

Nombre del atributo Es obligatorio Valor
Tipo Nombre del tipo de entidad al que se hace referencia.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento ReferenceType. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra el elemento ReferenceType usado como elemento secundario de un elemento Parameter en una función definida por el modelo que acepta una referencia a un tipo de entidad Person:

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
   <Parameter Name="instructor">
     <ReferenceType Type="SchoolModel.Person" />
   </Parameter>
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

En el ejemplo siguiente se muestra el elemento ReferenceType usado como elemento secundario de un elemento ReturnType (Function) en una función definida por el modelo que devuelve una referencia a un tipo de entidad Person:

 <Function Name="GetPersonReference">
     <Parameter Name="p" Type="SchoolModel.Person" />
     <ReturnType>
         <ReferenceType Type="SchoolModel.Person" />
     </ReturnType>
     <DefiningExpression>
           REF(p)
     </DefiningExpression>
 </Function>

 

 

ReferentialConstraint (Elemento) (CSDL)

Un elemento ReferentialConstraint en el lenguaje de definición de esquemas conceptuales (CSDL) define una funcionalidad similar a una restricción de integridad referencial en una base de datos relacional. Del mismo modo que las columnas de una tabla de base de datos pueden hacer referencia a la clave principal de otra tabla, las propiedades de un tipo de entidad pueden hacer referencia a la clave de entidad de otro tipo de entidad. El tipo de entidad al que se hace referencia se denomina extremo principal de la restricción. El tipo de entidad que hace referencia al extremo principal se denomina extremo dependiente de la restricción.

Si una clave externa que se expone en un tipo de entidad hace referencia a una propiedad de otro tipo de entidad, el elemento ReferentialConstraint define una asociación entre los dos tipos de entidad. Dado que el elemento ReferentialConstraint proporciona información sobre cómo se relacionan dos tipos de entidad, no es necesario especificar el elemento AssociationSetMapping correspondiente en el lenguaje de especificación de asignaciones (MSL). Una asociación entre dos tipos de entidad que no tienen claves externas expuestas debe tener un elemento AssociationSetMapping correspondiente para poder asignar la información de asociación al origen de datos.

Si una clave externa no se expone en un tipo de entidad, el elemento ReferentialConstraint solo puede definir una restricción de clave principal a clave principal entre dicho tipo y otro tipo de entidad.

Un elemento ReferentialConstraint puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Principal (exactamente un elemento)
  • Dependent (exactamente un elemento)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

El elemento ReferentialConstraint puede tener cualquier número de atributos de anotación (atributos XML personalizados). Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra un elemento ReferentialConstraint que se usa como parte de la definición de la asociación PublishedBy.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento ReturnType (Function) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento ReturnType (Function) especifica el tipo de valor devuelto para una función definida en un elemento Function. El tipo de valor devuelto de una función también se puede especificar con un atributo ReturnType.

Los tipos de valor devuelto pueden ser cualquier EdmSimpleType, tipo de entidad, tipo complejo, tipo de fila, tipo ref o una colección de uno de estos tipos.

El tipo de valor devuelto de una función se puede especificar mediante el atributo Type del elemento ReturnType (Function) o con uno de los siguientes elementos secundarios:

  • CollectionType
  • ReferenceType
  • RowType

Nota:

Un modelo no se validará si especifica un tipo de valor devuelto de una función con el atributo Type del elemento ReturnType (Function) y uno de los elementos secundarios.

 

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento ReturnType (Function).

Nombre del atributo Es obligatorio Valor
ReturnType No El tipo devuelto por la función.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento ReturnType (Function). Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se usa un elemento Function para definir una función que devuelve el número de años que lleva publicado un libro. Observe que el tipo de valor devuelto se especifica mediante el atributo Type de un elemento ReturnType (Function).

 <Function Name="GetYearsInPrint">
   <ReturnType Type=="Edm.Int32">
   <Parameter Name="book" Type="BooksModel.Book" />
   <DefiningExpression>
    Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
   </DefiningExpression>
 </Function>

 

 

Elemento ReturnType (FunctionImport) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento ReturnType (FunctionImport) especifica el tipo de valor devuelto para una función definida en un elemento FunctionImport. El tipo de valor devuelto de una función también se puede especificar con un atributo ReturnType.

Los tipos de valor devuelto pueden ser cualquier colección de tipos de entidad, tipos complejos o EdmSimpleType.

El tipo de valor devuelto de una función se especifica con el atributo Type del elemento ReturnType (FunctionImport).

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento ReturnType (FunctionImport).

Nombre del atributo Es obligatorio Valor
Tipo No Tipo devuelto por la función. El valor debe ser una colección de ComplexType, EntityType o EDMSimpleType.
EntitySet No Si la función devuelve una colección de tipos de entidad, el valor de EntitySet debe ser el conjunto de entidades al que pertenece la colección. De lo contrario, el atributo EntitySet no debe usarse.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento ReturnType (FunctionImport). Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se usa un elemento FunctionImport que devuelve libros y publicadores. Observe que la función devuelve dos conjuntos de resultados y, por tanto, se especifican dos elementos ReturnType (FunctionImport).

 <FunctionImport Name="GetBooksAndPublishers">
   <ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
   <ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
 </FunctionImport>

 

 

RowType (Elemento) (CSDL)

Un elemento RowType en el lenguaje de definición de esquemas conceptuales (CSDL) define una estructura sin nombre como un parámetro o tipo de valor devuelto para una función definida en el modelo conceptual.

Un elemento RowType puede ser el secundario de los elementos siguientes:

  • CollectionType
  • Parámetro
  • ReturnType (Function)

Un elemento RowType puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Property (uno o varios)
  • Elementos Annotation (cero o más)

Atributos aplicables

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento RowType. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra una función definida por modelo que utiliza un elemento CollectionType para especificar que la función devuelve una colección de filas (tal y como se especifica en el elemento RowType).

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

Schema (Elemento) (CSDL)

El elemento Schema es el elemento raíz de una definición de modelo conceptual. Contiene las definiciones para los objetos, las funciones y los contenedores que conforman un modelo conceptual.

El elemento Schema puede contener cero o varios de los elementos secundarios siguientes:

  • Uso
  • EntityContainer
  • EntityType
  • EnumType
  • Asociación
  • ComplexType
  • Función

Un elemento Schema puede contener cero o un elemento Annotation.

Nota:

El elemento Function y los elementos de anotación solo se permiten en CSDL v2 y versiones posteriores.

 

El elemento Schema usa el atributo Namespace para definir el espacio de nombres para el tipo de entidad, el tipo complejo y los objetos de asociación de un modelo conceptual. Dentro de un espacio de nombres, no puede haber dos objetos con el mismo nombre. Los espacios de nombres pueden abarcar varios elementos Schema y varios archivos .csdl.

El espacio de nombres de un modelo conceptual es diferente del espacio de nombres XML del elemento Schema. El espacio de nombres de un modelo conceptual (tal y como lo define el atributo Namespace) es un contenedor lógico para tipos de entidad, tipos complejos y tipos de asociación. El espacio de nombres XML (indicado por el atributo xmlns) de un elemento Schema es el espacio de nombres predeterminado para los elementos secundarios y los atributos del elemento Schema. Los espacios de nombres XML del tipo https://schemas.microsoft.com/ado/YYYY/MM/edm (donde AAAA y MM representan un año y un mes respectivamente) se reservan para CSDL. No puede haber elementos y atributos personalizados en espacios de nombres que tengan este formato.

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Schema.

Nombre del atributo Es obligatorio Valor
Espacio de nombres El espacio de nombres del modelo conceptual. El valor del atributo Namespace se usa para formar el nombre completo de un tipo. Por ejemplo, si un atributo EntityType denominado Customer está en el espacio de nombres Simple.Example.Model, el nombre completo de EntityType es SimpleExampleModel.Customer.
Las cadenas siguientes no se pueden usar como valores para el atributo Namespace: System, Transient o Edm. El valor del atributo Namespace no puede coincidir con el valor del atributo Namespace del elemento esquema SSDL.
Alias No Un identificador usado en lugar del nombre del espacio de nombres. Por ejemplo, si un atributo EntityType denominado Customer está en el espacio de nombres Simple.Example.Model y el valor del atributo Alias es Model, puede usar Model.Customer como el nombre completo del atributo EntityType.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Schema. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra un elemento Schema que contiene un elemento EntityContainer, dos elementos EntityType y un elemento Association.

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
      xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
      xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
       Namespace="ExampleModel" Alias="Self">
         <EntityContainer Name="ExampleModelContainer">
           <EntitySet Name="Customers"
                      EntityType="ExampleModel.Customer" />
           <EntitySet Name="Orders" EntityType="ExampleModel.Order" />
           <AssociationSet
                       Name="CustomerOrder"
                       Association="ExampleModel.CustomerOrders">
             <End Role="Customer" EntitySet="Customers" />
             <End Role="Order" EntitySet="Orders" />
           </AssociationSet>
         </EntityContainer>
         <EntityType Name="Customer">
           <Key>
             <PropertyRef Name="CustomerId" />
           </Key>
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
           <Property Type="String" Name="Name" Nullable="false" />
           <NavigationProperty
                    Name="Orders"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Customer" ToRole="Order" />
         </EntityType>
         <EntityType Name="Order">
           <Key>
             <PropertyRef Name="OrderId" />
           </Key>
           <Property Type="Int32" Name="OrderId" Nullable="false" />
           <Property Type="Int32" Name="ProductId" Nullable="false" />
           <Property Type="Int32" Name="Quantity" Nullable="false" />
           <NavigationProperty
                    Name="Customer"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Order" ToRole="Customer" />
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
         </EntityType>
         <Association Name="CustomerOrders">
           <End Type="ExampleModel.Customer"
                Role="Customer" Multiplicity="1" />
           <End Type="ExampleModel.Order"
                Role="Order" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="Customer">
               <PropertyRef Name="CustomerId" />
             </Principal>
             <Dependent Role="Order">
               <PropertyRef Name="CustomerId" />
             </Dependent>
           </ReferentialConstraint>
         </Association>
       </Schema>

 

 

TypeRef (Elemento) (CSDL)

El elemento TypeRef en el lenguaje de definición de esquemas conceptuales (CSDL) proporciona una referencia a un tipo con nombre existente. El elemento TypeRef puede ser un elemento secundario del elemento CollectionType, que permite especificar que una función tiene una colección como un parámetro o tipo de valor devuelto.

Un elemento TypeRef puede tener los elementos secundarios siguientes, en el orden mostrado:

  • Documentation (cero o un elemento)
  • Elementos Annotation (cero o más elementos)

Atributos aplicables

En la tabla siguiente se explican los atributos que se pueden aplicar al elemento TypeRef. Tenga en cuenta que los atributos DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode y Collation solo se aplican a EDMSimpleTypes.

Nombre del atributo Es obligatorio Valor
Tipo No El nombre del tipo al que se hace referencia.
Admisión de valores NULL No True (el valor predeterminado) o False, según si la propiedad puede tener un valor nulo.
[!NOTE]
> En CSDL v1, una propiedad de tipo complejo debe tener Nullable="False".
DefaultValue No Valor predeterminado de la propiedad.
MaxLength No La longitud máxima del valor de la propiedad.
FixedLength No True o False en función de si el valor de propiedad se va a almacenar como una cadena de longitud fija.
Precisión No Precisión del valor de propiedad.
Escala No Escala del valor de propiedad.
SRID No Identificador de referencia del sistema espacial. Válido solo para las propiedades de los tipos espaciales. Para obtener más información, consulte SRID y SRID (SQL Server).
Unicode No True o False en función de si el valor de propiedad se va a almacenar como una cadena Unicode.
Intercalación No Cadena que especifica la secuencia de intercalación que se usará en el origen de datos.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento CollectionType. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra una función definida por modelo que utiliza el elemento TypeRef (como elemento secundario de un elemento CollectionType) para especificar que la función acepta una colección de tipos de entidad Department.

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

Using (Elemento) (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), el elemento Using importa el contenido de un modelo conceptual que ya existe en un espacio de nombres diferente. Si establece el valor del atributo Namespace, podrá hacer referencia a los tipos de entidad, tipos complejos y tipos de asociación definidos en otro modelo conceptual. Un elemento Schema puede tener varios elementos secundarios Using.

Nota:

El elemento Using en CSDL no funciona exactamente como una instrucción using en un lenguaje de programación. Si importa un espacio de nombres con una instrucción using en un lenguaje de programación, no afectará a los objetos del espacio de nombres original. En CSDL, un espacio de nombres importado puede contener un tipo de entidad derivado de un tipo de entidad del espacio de nombres original. Esto puede afectar a los conjuntos de entidades declarados en el espacio de nombres original.

 

El elemento Using puede tener los siguientes elementos secundarios:

  • Documentation (cero o un elemento permitido)
  • Elementos Annotation (cero o más elementos permitidos)

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden aplicar al elemento Using.

Nombre del atributo Es obligatorio Valor
Espacio de nombres Nombre del espacio de nombres importado.
Alias Un identificador usado en lugar del nombre del espacio de nombres. Aunque este atributo es obligatorio, no es necesario usarlo en lugar del nombre del espacio de nombres para calificar los nombres de los objetos.

 

Nota:

Se puede aplicar cualquier número de atributos de anotación (atributos XML personalizados) al elemento Using. Sin embargo, es posible que los atributos personalizados no pertenezcan a ningún espacio de nombres XML reservado para CSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

 

Ejemplo

En el ejemplo siguiente se muestra cómo usar el elemento Using para importar un espacio de nombres definido en otra parte. Observe que el espacio de nombres para el elemento Schema mostrado es BooksModel. La propiedad Address del elemento EntityType de Publisher es un tipo complejo definido en el espacio de nombres ExtendedBooksModel (importado con el elemento Using).

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
           xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
           xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
           Namespace="BooksModel" Alias="Self">

     <Using Namespace="BooksModel.Extended" Alias="BMExt" />

 <EntityContainer Name="BooksContainer" >
       <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
     </EntityContainer>

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BMExt.Address" Name="Address" Nullable="false" />
     </EntityType>

 </Schema>

 

 

Atributos de anotación (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), los atributos de anotación son atributos XML personalizados del modelo conceptual. Además de tener una estructura XML válida, los atributos de anotación deben cumplir las condiciones siguientes:

  • Los atributos de anotación no deben estar en ningún espacio de nombres XML reservado para CSDL.
  • Se pueden aplicar varios atributos de anotación a un elemento CSDL determinado.
  • Dos atributos de anotación cualesquiera no pueden tener el mismo nombre completo.

Los atributos de anotación se pueden usar para proporcionar metadatos adicionales sobre los elementos en un modelo conceptual. Se puede acceder a los metadatos contenidos en los elementos de anotación en tiempo de ejecución utilizando las clases del espacio de nombres System.Data.Metadata.Edm.

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityType con un atributo de anotación (CustomAttribute). El ejemplo también muestra un elemento Annotation aplicado al elemento de tipo de entidad.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

El siguiente código recupera los metadatos del atributo Annotation y los escribe en la consola:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomAttribute"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

El código anterior supone que el archivo School.csdl está en el directorio de resultados del proyecto y que se han agregado las siguientes instrucciones Imports y Using al proyecto:

 using System.Data.Metadata.Edm;

 

 

Elementos Annotation (CSDL)

Los elementos Annotation en el lenguaje de definición de esquemas conceptuales (CSDL) son los elementos XML personalizados del modelo conceptual. Además de tener una estructura XML válida, lo siguiente debe ser verdadero para los elementos Annotation:

  • Los elementos Annotation no deben estar en un espacio de nombres XML que esté reservado para CSDL.
  • Más de un elemento Annotation puede ser un elemento secundario de un elemento CSDL determinado.
  • Los nombres completos de dos elementos Annotation cualesquiera no deben ser los mismos.
  • Los elementos Annotation deben aparecer después de todos los demás elementos secundarios de un elemento CSDL determinado.

Los elementos Annotation pueden utilizarse para proporcionar metadatos adicionales sobre los elementos en un modelo conceptual. A partir de la versión 4 de .NET Framework, se puede acceder a los metadatos contenidos en los elementos de anotación en tiempo de ejecución mediante clases del espacio de nombres System.Data.Metadata.Edm.

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityType con un elemento de anotación (CustomElement). El ejemplo también muestra un atributo de anotación aplicado al elemento de tipo de entidad.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

El siguiente código recupera los metadatos del elemento de anotación y los escribe en la consola:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

El código anterior supone que el archivo School.csdl está en el directorio de resultados del proyecto y que se han agregado las siguientes instrucciones Imports y Using al proyecto:

 using System.Data.Metadata.Edm;

 

 

Tipos de modelos conceptuales (CSDL)

El lenguaje de definición de esquemas conceptuales (CSDL) admite un conjunto de tipos de datos primitivos abstractos, denominados EDMSimpleTypes, que definen las propiedades en un modelo conceptual. EDMSimpleTypes son objetos proxy para los tipos de datos primitivos que se utilizan en el entorno de almacenamiento u hospedaje.

En la tabla siguiente se enumeran los tipos de datos primitivos admitidos por CSDL. En la tabla también se incluyen las facetas que se pueden aplicar a cada EDMSimpleType.

EDMSimpleType Descripción Facetas aplicables
Edm.Binary Contiene datos binarios. MaxLength, FixedLength, Nullable, Default
Edm.Boolean Contiene el valor true o false. Nullable, Default
Edm.Byte Contiene un valor entero de 8 bits sin signo. Precision, Nullable, Default
Edm.DateTime Representa una fecha y hora. Precision, Nullable, Default
Edm.DateTimeOffset Contiene una fecha y hora como un desplazamiento en minutos con respecto a GMT. Precision, Nullable, Default
Edm.Decimal Contiene un valor numérico con una precisión y escala fijas. Precision, Nullable, Default
Edm.Double Contiene un número de punto flotante con una precisión de 15 dígitos. Precision, Nullable, Default
Edm.Float Contiene un número de punto flotante con una precisión de 7 dígitos. Precision, Nullable, Default
Edm.Guid Contiene un identificador único de 16 bytes. Precision, Nullable, Default
Edm.Int16 Contiene un valor entero de 16 bits con signo. Precision, Nullable, Default
Edm.Int32 Contiene un valor entero de 32 bits con signo. Precision, Nullable, Default
Edm.Int64 Contiene un valor entero de 64 bits con signo. Precision, Nullable, Default
Edm.SByte Contiene un valor entero de 8 bits con signo. Precision, Nullable, Default
Edm.String Contiene datos de caracteres. Unicode, FixedLength, MaxLength, Collation, Precision, Nullable, Default
Edm.Time Contiene una hora del día. Precision, Nullable, Default
Edm.Geography Nullable, Default, SRID
Edm.GeographyPoint Nullable, Default, SRID
Edm.GeographyLineString Nullable, Default, SRID
Edm.GeographyPolygon Nullable, Default, SRID
Edm.GeographyMultiPoint Nullable, Default, SRID
Edm.GeographyMultiLineString Nullable, Default, SRID
Edm.GeographyMultiPolygon Nullable, Default, SRID
Edm.GeographyCollection Nullable, Default, SRID
Edm.Geometry Nullable, Default, SRID
Edm.GeometryPoint Nullable, Default, SRID
Edm.GeometryLineString Nullable, Default, SRID
Edm.GeometryPolygon Nullable, Default, SRID
Edm.GeometryMultiPoint Nullable, Default, SRID
Edm.GeometryMultiLineString Nullable, Default, SRID
Edm.GeometryMultiPolygon Nullable, Default, SRID
Edm.GeometryCollection Nullable, Default, SRID

Facets (CSDL)

En el lenguaje de definición de esquemas conceptuales (CSDL), las facetas representan restricciones en las propiedades de tipos de entidad y tipos complejos. Las facetas aparecen como atributos XML en los elementos CSDL siguientes:

  • Propiedad
  • TypeRef
  • Parámetro

En la tabla siguiente se describen las facetas que se admiten en CSDL. Todas las facetas son opcionales. Entity Framework usa algunas de las facetas que se enumeran a continuación al generar una base de datos a partir de un modelo conceptual.

Nota:

Para obtener información sobre los tipos de datos de un modelo conceptual, consulte Tipos de modelos conceptuales (CSDL).

Faceta Descripción Se aplica a Se utiliza para la generación de la base de datos La usa el runtime.
Intercalación Especifica la secuencia de intercalación (o secuencia de orden) que se va a usar cuando se realicen las operaciones de comparación y ordenación sobre los valores de la propiedad. Edm.String No
ConcurrencyMode Indica que el valor de propiedad se debería utilizar para las comprobaciones de la simultaneidad optimista. Todas las propiedades EDMSimpleType No
Valor predeterminado Especifica el valor predeterminado de la propiedad si no se proporciona ningún valor al crear las instancias. Todas las propiedades EDMSimpleType
FixedLength Especifica si la longitud del valor de propiedad puede variar. Edm.Binary, Edm.String No
MaxLength Especifica la longitud máxima del valor de propiedad. Edm.Binary, Edm.String No
Admisión de valores NULL Especifica si la propiedad puede tener un valor NULL. Todas las propiedades EDMSimpleType
Precisión Para propiedades de tipo Decimal, especifica el número de dígitos que puede tener el valor de una propiedad. Para las propiedades de tipo Time, DateTime y DateTimeOffset, especifica el número de dígitos para la parte fraccionaria de segundos del valor de propiedad. Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time No
Escala Especifica el número de dígitos que puede haber a la derecha del separador decimal para el valor de propiedad. Edm.Decimal No
SRID Especifica el identificador de referencia del sistema espacial. Para obtener más información, consulte SRID y SRID (SQL Server). Edm.Geography, Edm.GeographyPoint, Edm.GeographyLineString, Edm.GeographyPolygon, Edm.GeographyMultiPoint, Edm.GeographyMultiLineString, Edm.GeographyMultiPolygon, Edm.GeographyCollection, Edm.Geometry, Edm.GeometryPoint, Edm.GeometryLineString, Edm.GeometryPolygon, Edm.GeometryMultiPoint, Edm.GeometryMultiLineString, Edm.GeometryMultiPolygon, Edm.GeometryCollection No
Unicode Indica si el valor de propiedad está almacenado como Unicode. Edm.String

Nota:

Al generar una base de datos a partir de un modelo conceptual, el Asistente para generar base de datos reconocerá el valor del atributo StoreGeneratedPattern en un elemento Property si está en el siguiente espacio de nombres: https://schemas.microsoft.com/ado/2009/02/edm/annotation. Los valores admitidos para el atributo son Identity y Computed. El valor Identity generará una columna de base de datos con un valor de identidad que se genera en la base de datos. El valor Computed generará una columna con un valor que se calcula en la base de datos.

Ejemplo

En el ejemplo siguiente se muestran facetas aplicadas a las propiedades de un tipo de entidad:

 <EntityType Name="Product">
   <Key>
     <PropertyRef Name="ProductId" />
   </Key>
   <Property Type="Int32"
             Name="ProductId" Nullable="false"
             a:StoreGeneratedPattern="Identity"
    xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
   <Property Type="String"
             Name="ProductName"
             Nullable="false"
             MaxLength="50" />
   <Property Type="String"
             Name="Location"
             Nullable="true"
             MaxLength="25" />
 </EntityType>