Especificación SSDL

El lenguaje de definición de esquemas de almacenamiento (SSDL) es un lenguaje basado en XML que describe el modelo de almacenamiento de una aplicación Entity Framework.

En una aplicación de Entity Framework, los metadatos del modelo de almacenamiento se cargan desde un archivo .ssdl (escrito en SSDL) en una instancia de la clase System.Data.Metadata.Edm.StoreItemCollection y son accesibles mediante métodos de la clase System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework utiliza los metadatos del modelo de almacenamiento para traducir las consultas contra el modelo conceptual a órdenes específicas del almacén.

Entity Framework Designer (EF Designer) almacena información del modelo de almacenamiento en un archivo .edmx en tiempo de diseño. Entity Designer usa la información del archivo .edmx en tiempo de compilación para crear el archivo .ssdl que Entity Framework necesita en tiempo de ejecución.

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

Versión de SSDL XML Namespace
SSDL v1 https://schemas.microsoft.com/ado/2006/04/edm/ssdl
SSDL v2 https://schemas.microsoft.com/ado/2009/02/edm/ssdl
SSDL v3 https://schemas.microsoft.com/ado/2009/11/edm/ssdl

Association (Elemento) (SSDL)

Un elemento de Asociación del lenguaje de definición de esquemas de almacenamiento (SSDL) especifica las columnas de tabla que participan en una restricción de clave externa de la base de datos subyacente. Dos elementos End secundarios necesarios especifican las tablas de los extremos de la asociación y la multiplicidad en cada extremo. Un elemento ReferentialConstraint opcional especifica los extremos principal y dependiente de la asociación así como las columnas participantes. Si no hay ningún elemento ReferentialConstraint presente, se deberá utilizar un elemento AssociationSetMapping para especificar las asignaciones de columnas para la asociación.

El elemento de Asignación puede tener los elementos secundarios siguientes (en el orden mostrado):

  • Documentation (cero o uno)
  • End (exactamente dos)
  • ReferentialConstraint (cero o uno)
  • Elementos Annotation (cero o más)

Atributos aplicables

La siguiente tabla describe los atributos que pueden aplicarse al elemento Association.

Nombre del atributo Es obligatorio Valor
Nombre El nombre de la restricción de clave externa correspondiente de la base de datos subyacente.

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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra un elemento Association que usa un elemento ReferentialConstraint para especificar las columnas que participan en la restricción de clave externa FK_CustomerOrders :

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

AssociationSet (Elemento) (SSDL)

El elemento AssociationSet del lenguaje de definición de esquemas de almacenes (SSDL) representa una restricción de clave foránea entre dos tablas de la base de datos subyacente. Las columnas de la tabla que participan en la restricción de clave externa se especifican en un elemento Association. El elemento Association que corresponde a un elemento AssociationSet determinado se especifica en el atributo Association del elemento AssociationSet.

Los conjuntos de asociaciones SSDL están asignados a conjuntos de asociaciones CSDL mediante un elemento AssociationSetMapping. Sin embargo, si la asociación CSDL para un conjunto de asociaciones CSDL dado se define utilizando un elemento ReferentialConstraint , no es necesario el elemento AssociationSetMapping correspondiente. En este caso, si existe un elemento AssociationSetMapping, el elemento ReferentialConstraintinvalidará las asignaciones que define.

El elemento AssociationSet puede tener los siguientes elementos hijos (en el orden en que se enumeran):

  • Documentation (cero o uno)
  • End (cero o dos)
  • Elementos Annotation (cero o más)

Atributos aplicables

La siguiente tabla describe los atributos que pueden aplicarse al elemento AssociationSet.

Nombre del atributo Es obligatorio Valor
Nombre El nombre de la restricción de clave externa representada por el conjunto de asociaciones.
Asociación El nombre de la asociación que define las columnas que participan en la restricción de clave externa.

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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

El siguiente ejemplo muestra un elemento AssociationSet que representa la restricción de clave foránea FK_CustomerOrders en la base de datos subyacente:

 <AssociationSet Name="FK_CustomerOrders"
                 Association="ExampleModel.Store.FK_CustomerOrders">
   <End Role="Customers" EntitySet="Customers" />
   <End Role="Orders" EntitySet="Orders" />
 </AssociationSet>

CollectionType (Elemento de SSDL)

El elemento CollectionType del lenguaje de definición de esquemas de almacén (SSDL) especifica que el tipo de valor devuelto de una función es una colección. El elemento CollectionType es un elemento secundario del elemento ReturnType. El tipo de colección se especifica mediante el elemento secundario RowType:

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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra una función que usa un elemento CollectionType para especificar que la función devuelve una colección de filas.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

CommandText (Elemento) (SSDL)

El elemento CommandText del lenguaje de definición de esquemas de almacenes (SSDL) es un hijo del elemento Function que permite definir una sentencia SQL que se ejecuta en la base de datos. El elemento CommandText le permite añadir una funcionalidad similar a la de un procedimiento almacenado en la base de datos, pero usted define el elemento CommandText en el modelo de almacenamiento.

El elemento CommandText no puede tener elementos secundarios. El cuerpo del elemento CommandText debe ser una sentencia SQL válida para la base de datos subyacente.

No se aplica ningún atributo al elemento CommandText.

Ejemplo

En el ejemplo siguiente se muestra un elemento Function con un elemento CommandText secundario. Exponga la función UpdateProductInOrder como un método en ObjectContext importándolo en el modelo conceptual.  

 <Function Name="UpdateProductInOrder" IsComposable="false">
   <CommandText>
     UPDATE Orders
     SET ProductId = @productId
     WHERE OrderId = @orderId;
   </CommandText>
   <Parameter Name="productId"
              Mode="In"
              Type="int"/>
   <Parameter Name="orderId"
              Mode="In"
              Type="int"/>
 </Function>

DefiningQuery (Elemento) (SSDL)

El elemento DefiningQuery del lenguaje de definición de esquemas de almacenes (SSDL) le permite ejecutar una sentencia SQL directamente en la base de datos subyacente. El elemento DefiningQuery se utiliza habitualmente como una vista de base de datos, pero la vista se define en el modelo de almacenamiento en lugar de en la base de datos. La vista definida en un elemento DefiningQuery puede mapearse a un tipo de entidad en el modelo conceptual a través de un elemento EntitySetMapping. Estas asignaciones son de solo lectura.  

La siguiente sintaxis SSDL muestra la declaración de un EntitySet seguida del elemento DefiningQuery que contiene una consulta utilizada para recuperar la vista.

 <Schema>
     <EntitySet Name="Tables" EntityType="Self.STable">
         <DefiningQuery>
           SELECT  TABLE_CATALOG,
                   'test' as TABLE_SCHEMA,
                   TABLE_NAME
           FROM    INFORMATION_SCHEMA.TABLES
         </DefiningQuery>
     </EntitySet>
 </Schema>

Puede utilizar procedimientos almacenados en Entity Framework para habilitar escenarios de lectura-escritura sobre las vistas. Puede utilizar una vista de fuente de datos o una vista Entity SQL como tabla base para recuperar datos y para el procesamiento de cambios mediante procedimientos almacenados.

Puede usar el elemento DefiningQuery para tener como destino Microsoft SQL Server Compact 3.5. Aunque SQL Server Compact 3.5 no admite procedimientos almacenados, puede implementar una funcionalidad similar con el elemento DefiningQuery. Otro caso donde puede ser útil es en la creación de procedimientos almacenados para resolver una desigualdad entre los tipos de datos utilizados en el lenguaje de programación y los del origen de datos. Puede escribir una DefiningQuery que tome un determinado conjunto de parámetros y luego llame a un procedimiento almacenado con un conjunto diferente de parámetros, por ejemplo, un procedimiento almacenado que borre datos.

Dependent (Elemento) (SSDL)

El elemento Dependent del lenguaje de definición de esquemas de almacenes (SSDL) es un elemento hijo del elemento ReferentialConstraint que define el extremo dependiente de una restricción de clave foránea (también denominada restricción referencial). El elemento Dependent especifica la columna (o columnas) de una tabla que hacen referencia a una columna (o columnas) de clave primaria. Los elementos PropertyRef especifican a qué columnas se hace referencia. El elemento Principal especifica las columnas de clave primaria a las que hacen referencia las columnas especificadas en el elemento Dependent.

El elemento Dependent puede tener los siguientes elementos hijos (en el orden indicado):

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

Atributos aplicables

La siguiente tabla describe los atributos que pueden aplicarse al elemento Dependent.

Nombre del atributo Es obligatorio Valor
Rol El mismo valor que el atributo Role (si se utiliza) del elemento End correspondiente; en caso contrario, el nombre de la tabla que contiene la columna de referencia.

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 Association que usa un elemento ReferentialConstraint para especificar las columnas que participan en la restricción de clave externa FK_CustomerOrders. El elemento Dependent especifica la columna CustomerId de la tabla Order como el final dependiente de la restricción.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Documentation (Elemento) (SSDL)

El elemento Documentación del lenguaje de definición de esquemas de almacenes (SSDL) puede utilizarse para proporcionar información sobre un objeto definido en un elemento padre.

El elemento Documentación puede tener los siguientes elementos hijos (en el orden en que aparecen en la lista):

  • Resumen: Una breve descripción del elemento padre. (cero o un elemento).
  • LongDescription: una descripción extensa del elemento primario. (cero o un elemento).

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

El siguiente ejemplo muestra el elemento Documentation como elemento hijo de un elemento EntityType.

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

End (Elemento) (SSDL)

El elemento End del lenguaje de definición de esquemas de almacenes (SSDL) especifica la tabla y el número de filas en un extremo de una restricción de clave foránea en la base de datos subyacente. El elemento End puede ser hijo del elemento Association o del elemento AssociationSet. En cada caso, los posibles elementos secundarios y atributos aplicables son diferentes.

Elemento End como elemento secundario del elemento Association

Un elemento End (como elemento secundario del elemento Association ) especifica la tabla y el número de filas al final de una restricción de clave externa con los atributos Type y Multiplicity respectivamente. Los extremos de una restricción de clave externa se definen como parte de una asociación SSDL, la cual debe tener exactamente dos extremos.

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

La siguiente tabla describe los atributos que pueden aplicarse al elemento End cuando es hijo de un elemento Association.

Nombre del atributo Es obligatorio Valor
Tipo El nombre completo del conjunto de entidades SSDL que está en el extremo de la restricción de clave externa.
Rol No El valor del atributo Role en el elemento Principal o Dependiente del elemento ReferentialConstraint correspondiente (si se utiliza).
Multiplicidad 1, 0..1, o * en función del número de filas que puede haber al final de la restricción de clave foránea.
1 indica que hay exactamente una fila en el extremo de la restricción de clave externa.
0..1 indica que hay una fila o ninguna en el extremo de la restricción de clave externa.
* que pueden existir cero, una o varias filas en el extremo de la restricción de clave externa.

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 restricción de clave externa FK_CustomerOrders . Los valores de Multiplicity especificados en cada elemento End indican que muchas filas de la tabla Orders se pueden asociar a una fila de la tabla Customers , pero solo una fila de la tabla Customers se puede asociar a una fila de la tabla Orders. Además, el elemento OnDelete indica que todas las filas de la tabla Orders que hacen referencia a una fila determinada de la tabla Customers se eliminarán si se elimina la fila de la tabla Customers.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento End como elemento secundario del elemento AssociationSet

El elemento End (como hijo del elemento AssociationSet) especifica una tabla en un extremo de una restricción de clave foránea en la base de datos subyacente.

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

  • Documentation (cero o uno)
  • Elementos Annotation (cero o más)

Atributos aplicables

La siguiente tabla describe los atributos que pueden aplicarse al elemento End cuando es hijo de un elemento AssociationSet.

Nombre del atributo Es obligatorio Valor
EntitySet El nombre del conjunto de entidades SSDL que está en el extremo de la restricción de clave externa.
Rol No El valor de uno de los atributos Role especificados en un elemento End del elemento Association correspondiente.

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 un elemento AssociationSet con dos elementos End:

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityContainer (Elemento) (SSDL)

Un elemento EntityContainer del lenguaje de definición de esquemas de almacenes (SSDL) describe la estructura de la fuente de datos subyacente en una aplicación de Entity Framework: Los conjuntos de entidades SSDL (definidos en elementos EntitySet) representan tablas en una base de datos, los tipos de entidades SSDL (definidos en elementos EntityType) representan filas en una tabla, y los conjuntos de asociaciones (definidos en elementos AssociationSet) representan restricciones de clave externa en una base de datos. Un contenedor de entidades del modelo de almacenamiento se asigna a un contenedor de entidades del modelo de conceptual a través del elemento EntityContainerMapping.

Un elemento EntityContainer puede tener cero o uno elementos Documentation. Si hay un elemento Documentation presente, debe preceder a todos los demás elementos secundarios.

Un elemento EntityContainer puede tener cero o más de los siguientes elementos hijos (en el orden en que se enumeran):

  • EntitySet
  • AssociationSet
  • Elementos Annotation

Atributos aplicables

En la tabla siguiente se describen los atributos que se pueden encontrar en el elemento EntityContainer.

Nombre del atributo Es obligatorio Valor
Nombre Nombre del contenedor de entidades. Este nombre no puede contener puntos (.).

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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

El siguiente ejemplo muestra un elemento EntityContainer que define dos conjuntos de entidades y un conjunto de asociaciones. Observe que los nombres de los tipos de entidad y tipos de asociación están calificados mediante el nombre del espacio de nombres del modelo conceptual.

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntitySet (Elemento) (SSDL)

Un elemento EntitySet en el lenguaje de definición de esquemas de almacenes (SSDL) representa una tabla o vista en la base de datos subyacente. Un elemento EntityType de SSDL representa una fila de la tabla o vista. El atributo EntityType de un elemento EntitySet especifica el tipo de entidad SSDL concreto que representa las filas de un conjunto de entidades SSDL. La asignación entre un conjunto de entidades CSDL y un conjunto de entidades SSDL se especifica en un elemento EntitySetMapping.

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

  • Documentation (cero o un elemento)
  • DefiningQuery (cero o un elemento)
  • Elementos Annotation

Atributos aplicables

La siguiente tabla describe los atributos que pueden aplicarse al elemento EntitySet.

Nota:

Algunos atributos (no enumerados aquí) pueden calificarse con el alias de almacén. El Asistente para actualizar modelo utiliza estos atributos al actualizar un modelo.

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.
Esquema No El esquema de base de datos.
Tabla No La tabla de base de datos.

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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra un elemento EntityContainer que tiene dos elementos EntitySet y un elemento AssociationSet:

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityType (Elemento) (SSDL)

Un elemento EntityType en el lenguaje de definición de esquemas de almacenes (SSDL) representa una fila en una tabla o vista de la base de datos subyacente. Un elemento EntitySet de SSDL representa la tabla o vista donde están las filas. El atributo EntityType de un elemento EntitySet especifica el tipo de entidad SSDL concreto que representa las filas de un conjunto de entidades SSDL. La asignación entre un tipo de entidad SSDL y un tipo de entidad CSDL se especifica en un elemento EntityTypeMapping.

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

  • Documentation (cero o un elemento)
  • Key (cero o un elemento)
  • Elementos Annotation

Atributos aplicables

La tabla siguiente describe los atributos que pueden aplicarse al elemento EntityType.

Nombre del atributo Es obligatorio Valor
Nombre El nombre del tipo de entidad. Este valor normalmente es igual que el nombre de la tabla en la que el tipo de entidad representa una fila. Este valor no puede contener ningún punto (.).

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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

El siguiente ejemplo muestra un elemento EntityType con dos propiedades:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Function (Elemento) (SSDL)

El elemento Function del lenguaje de definición de esquemas de almacenes (SSDL) especifica un procedimiento almacenado que existe en la base de datos subyacente.

El elemento Función puede tener los siguientes elementos hijos (en el orden en que aparecen en la lista):

  • Documentation (cero o uno)
  • Parameter (cero o más)
  • CommandText (cero o uno)
  • ReturnType (cero o más)
  • Elementos Annotation (cero o más)

El tipo de retorno de una función debe especificarse con el elemento ReturnType o con el atributo ReturnType (véase más adelante), pero no con ambos.

Los procedimientos almacenados que se especifican en el modelo de almacenamiento se pueden importar en el modelo conceptual de una aplicación. Para obtener más información, consulte Consulta con procedimientos almacenados. El elemento Función también puede utilizarse para definir funciones personalizadas en el modelo de almacenamiento.  

Atributos aplicables

La siguiente tabla describe los atributos que pueden aplicarse al elemento Función.

Nota:

Algunos atributos (no enumerados aquí) pueden calificarse con el alias de almacén. El Asistente para actualizar modelo utiliza estos atributos al actualizar un modelo.

Nombre del atributo Es obligatorio Valor
Nombre Nombre del procedimiento almacenado.
ReturnType No El tipo de valor devuelto del procedimiento almacenado.
Agregado No Verdadero si el procedimiento almacenado devuelve un valor agregado; en caso contrario Falso.
BuiltIn No True si la función es una función incorporada 1; en caso contrario False.
StoreFunctionName No Nombre del procedimiento almacenado.
NiladicFunction No True si la función es una función niladic2 ; False en caso contrario.
IsComposable No True si la función es una función compuesta3 ; False en caso contrario.
ParameterTypeSemantics No La enumeración que define la semántica de tipos que se utiliza para resolver sobrecargas de función. La enumeración se define en el manifiesto del proveedor por cada definición de función. El valor predeterminado es AllowImplicitConversion.
Esquema No El nombre del esquema donde se define el procedimiento almacenado.

1 Una función integrada es una función que se define en la base de datos. Para obtener información sobre las funciones definidas en el modelo de almacenamiento, consulte CommandText Element (SSDL).

2 Una función niládica es una función que no acepta ningún parámetro y que no requiere paréntesis en la llamada.

3 Dos funciones admiten composición si el resultado de una función puede ser la entrada para la otra 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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra un elemento Function que corresponde al procedimiento almacenado UpdateOrderQuantity. El procedimiento almacenado acepta dos parámetros y no devuelve ningún valor.

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

Key (Elemento) (SSDL)

El elemento Key del lenguaje de definición de esquemas de almacenamiento (SSDL) representa la clave principal de una tabla de la base de datos subyacente. Key es un elemento secundario de un elemento EntityType, que representa una fila de una tabla. La clave primaria se define en el elemento Key haciendo referencia a uno o varios elementos Property que se definen en el elemento EntityType.

El elemento Key puede tener los siguientes elementos hijos (en el orden en que aparecen en la lista):

  • PropertyRef (uno o varios)
  • Elementos Annotation

No hay atributos aplicables al elemento Key.

Ejemplo

El siguiente ejemplo muestra un elemento EntityType con una clave que hace referencia a una propiedad:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

OnDelete (Elemento) (SSDL)

El elemento OnDelete del lenguaje de definición de esquemas de almacenes (SSDL) refleja el comportamiento de la base de datos cuando se elimina una fila que participa en una restricción de clave foránea. Si la acción se establece en Cascada, las filas que hagan referencia a una fila que se está eliminando también se eliminarán. Si la acción se establece como Ninguna, las filas que hacen referencia a una fila que se está eliminando no se eliminan también. Un elemento OnDelete es un elemento subordinado de un elemento End.

Un elemento OnDelete puede tener los siguientes elementos subordinados (en el orden indicado):

  • Documentation (cero o uno)
  • Elementos Annotation (cero o más)

Atributos aplicables

La siguiente tabla describe los atributos que pueden aplicarse al elemento OnDelete.

Nombre del atributo Es obligatorio Valor
Acción Cascada o Ninguno. (Valor Restringido es válido, pero tiene el mismo comportamiento que Ninguno).

Nota:

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

Ejemplo

En el ejemplo siguiente se muestra un elemento Association que define la restricción de clave externa FK_CustomerOrders. El elemento OnDelete indica que todas las filas de la tabla Orders que hacen referencia a una fila determinada de la tabla Customers se eliminarán si se elimina la fila de la tabla Customers.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Parameter (Elemento) (SSDL)

El elemento Parameter en el lenguaje de definición de esquemas de almacenes (SSDL) es un elemento subordinado del elemento Function que especifica parámetros para un procedimiento almacenado en la base de datos.

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

  • Documentation (cero o uno)
  • Elementos Annotation (cero o más)

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.
Modo No In, Out, o InOut dependiendo de si el parámetro es de entrada, de salida o de entrada/salida.
MaxLength No 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 parámetros de 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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

En el ejemplo siguiente se muestra un elemento Function que tiene dos elementos Parameter que especifican parámetros de entrada:

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

Principal (Elemento) (SSDL)

El elemento Principal en el lenguaje de definición de esquemas de almacenes (SSDL) es un elemento subordinado del elemento ReferentialConstraint que define el extremo principal de una restricción de clave externa (también denominada restricción referencial). El elemento Principal especifica la columna (o columnas) de clave primaria de una tabla a la que hace referencia otra columna (o columnas). Los elementos PropertyRef especifican a qué columnas se hace referencia. El elemento Dependent especifica columnas que hacen referencia a las columnas de clave principal que se especifican en el elemento Principal.

El elemento Principal puede tener los siguientes elementos subordinados (en el orden en que se enumeran):

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

Atributos aplicables

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

Nombre del atributo Es obligatorio Valor
Rol El mismo valor que el atributo Role (si se utiliza) del elemento End correspondiente; en caso contrario, el nombre de la tabla que contiene la columna referenciada.

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 Association que usa un elemento ReferentialConstraint para especificar las columnas que participan en la restricción de clave externa FK_CustomerOrders. El elemento Principal especifica la columna CustomerId de la tabla Customer como extremo principal de la restricción.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Property (Elemento) (SSDL)

El elemento Property del lenguaje de definición de esquemas de almacenes (SSDL) representa una columna de una tabla de la base de datos subyacente. Los elementos Property son hijos de los elementos EntityType, que representan las filas de una tabla. Cada elemento Property definido en un elemento EntityType representa una columna.

Un elemento Property no puede tener ningún elemento secundario.

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 columna correspondiente.
Tipo El tipo de la columna correspondiente.
Admisión de valores NULL No Verdadero (el valor por defecto) o Falso en función de si la columna correspondiente puede tener un valor nulo.
DefaultValue No El valor predeterminado de la columna correspondiente.
MaxLength No La longitud máxima de la columna correspondiente.
FixedLength No Verdadero o Falso en función de si el valor de la columna correspondiente se almacenará como una cadena de longitud fija.
Precisión No La precisión de la columna correspondiente.
Escala No La escala de la columna correspondiente.
Unicode No Verdadero o Falso en función de si el valor de la columna correspondiente se almacenará como una cadena Unicode.
Intercalación No Cadena que especifica la secuencia de intercalación que se usará en el origen de datos.
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).
StoreGeneratedPattern No Ninguno, Identidad (si el valor de columna correspondiente es una identidad que se genera en la base de datos), o Computado (si el valor de columna correspondiente se computa en la base de datos). No válido para las propiedades RowType.

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 SSDL. Dos atributos personalizados cualesquiera no pueden tener nombres completos idénticos.

Ejemplo

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

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

PropertyRef (Elemento) (SSDL)

El elemento PropertyRef del lenguaje de definición de esquemas de almacenes (SSDL) hace referencia a una propiedad definida en un elemento EntityType para indicar que la propiedad desempeñará una de las siguientes funciones:

  • Formar parte de la clave primaria de la tabla que representa el EntityType. Se pueden usar uno o varios elementos PropertyRef para definir una clave principal. Para obtener más información, vea Key.
  • Ser el extremo dependiente o principal de una restricción referencial. Para obtener más información, vea el elemento ReferentialConstraint.

El elemento PropertyRef solo puede tener los siguientes elementos secundarios:

  • Documentation (cero o uno)
  • Elementos Annotation

Atributos aplicables

La tabla siguiente describe los atributos que pueden aplicarse 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 siguiente ejemplo muestra un elemento PropertyRef utilizado para definir una clave primaria haciendo referencia a una propiedad definida en un elemento EntityType.

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

ReferentialConstraint (Elemento) (SSDL)

El elemento ReferentialConstraint del lenguaje de definición de esquemas de almacenes (SSDL) representa una restricción de clave foránea (también denominada restricción de integridad referencial) en la base de datos subyacente. Los extremos principal y dependiente de la restricción se especifican mediante los elementos secundarios Principal y Dependent, respectivamente. La referencia a las columnas que participan en los extremos principal y dependiente se realiza mediante elementos PropertyRef.

El elemento ReferentialConstraint es un elemento secundario opcional del elemento Association. Si no se usa un elemento ReferentialConstraint para asignar la restricción de clave externa especificada en el elemento Association, se debe usar un elemento AssociationSetMapping para ello.

El elemento ReferentialConstraint puede tener los siguientes elementos secundarios:

  • Documentation (cero o uno)
  • Principal (exactamente uno)
  • Dependent (exactamente uno)
  • Elementos Annotation (cero o más)

Atributos aplicables

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

Ejemplo

En el ejemplo siguiente se muestra un elemento Association que usa un elemento ReferentialConstraint para especificar las columnas que participan en la restricción de clave externa FK_CustomerOrders :

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Elemento ReturnType (SSDL)

El elemento ReturnType del lenguaje de definición de esquemas de almacenes (SSDL) especifica el tipo de retorno de 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.

El tipo de valor devuelto de una función se especifica con el atributo Type o el elemento ReturnType.

El elemento ReturnType puede tener los siguientes elementos subordinados:

  • CollectionType (uno)

Nota:

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

Ejemplo

En el ejemplo siguiente se usa un elemento Function que devuelve una colección de filas.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

RowType (Elemento) (SSDL)

Un elemento RowType del lenguaje de definición de esquema de almacén (SSDL) define una estructura sin nombre como un tipo de valor devuelto para una función definida en el almacén.

Un elemento RowType es el elemento secundario del elemento CollectionType:

Un elemento RowType puede tener los siguientes elementos subordinados:

  • Property (uno o varios)

Ejemplo

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

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

Schema (Elemento) (SSDL)

El elemento Schema del lenguaje de definición de esquemas de almacenamiento (SSDL) es el elemento raíz de la definición de un modelo de almacenamiento. Contiene las definiciones para los objetos, las funciones y los contenedores que conforman un modelo de almacenamiento.

El elemento Schema puede contener cero o más de los siguientes elementos subordinados:

  • Asociación
  • EntityType
  • EntityContainer
  • Función

El elemento Schema utiliza el atributo Namespace para definir el espacio de nombres para el tipo de entidad y los objetos de asociación en un modelo de almacenamiento. Dentro de un espacio de nombres, no puede haber dos objetos con el mismo nombre.

El espacio de nombres de un modelo de almacenamiento es diferente del espacio de nombres XML del elemento Schema. Un espacio de nombres del modelo de almacenamiento (definido por el atributo Namespace) es un contenedor lógico para tipos de entidad y tipos de asociación. El espacio de nombres XML (indicado por el atributo xmlns) de un elemento Schema es el espacio de nombres por defecto para los elementos subordinados y los atributos del elemento Schema. Los espacios de nombres XML del formulario https://schemas.microsoft.com/ado/YYYY/MM/edm/ssdl (donde AAAA y MM representan un año y mes respectivamente) están reservados para SSDL. No puede haber elementos y atributos personalizados en espacios de nombres que tengan este formato.

Atributos aplicables

La tabla siguiente describe los atributos que pueden aplicarse al elemento Schema.

Nombre del atributo Es obligatorio Valor
Espacio de nombres El espacio de nombres del modelo de almacenamiento. El valor del atributo Namespace se utiliza para formar el nombre completamente cualificado de un tipo. Por ejemplo, si un EntityType llamado Customer está en el espacio de nombres ExampleModel.Store, entonces el nombre completamente cualificado del EntityType es ExampleModel.Store.Customer.
Las cadenas siguientes no se pueden usar como valor para el atributo Namespace: System, Transiento Edm. El valor del atributoNamescpace no puede coincidir con el valor del atributo Namespace del elemento esquema CSDL.
Alias No Un identificador usado en lugar del nombre del espacio de nombres. Por ejemplo, si un EntityType llamado Customer se encuentra en el espacio de nombres ExampleModel.Store y el valor del atributo Alias es StorageModel, entonces puede utilizar StorageModel.Customer como nombre completo del EntityType.
Proveedor El proveedor de datos.
ProviderManifestToken Un token que indica al proveedor qué manifiesto del proveedor debe devolver. No se define ningún formato para el token. El proveedor define los valores para el token. Para obtener información sobre los tokens de manifiesto del proveedor de SQL Server, vea SqlClient for Entity Framework.

Ejemplo

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

 <Schema Namespace="ExampleModel.Store"
       Alias="Self" Provider="System.Data.SqlClient"
       ProviderManifestToken="2008"
       xmlns="https://schemas.microsoft.com/ado/2009/11/edm/ssdl">
   <EntityContainer Name="ExampleModelStoreContainer">
     <EntitySet Name="Customers"
                EntityType="ExampleModel.Store.Customers"
                Schema="dbo" />
     <EntitySet Name="Orders"
                EntityType="ExampleModel.Store.Orders"
                Schema="dbo" />
     <AssociationSet Name="FK_CustomerOrders"
                     Association="ExampleModel.Store.FK_CustomerOrders">
       <End Role="Customers" EntitySet="Customers" />
       <End Role="Orders" EntitySet="Orders" />
     </AssociationSet>
   </EntityContainer>
   <EntityType Name="Customers">
     <Documentation>
       <Summary>Summary here.</Summary>
       <LongDescription>Long description here.</LongDescription>
     </Documentation>
     <Key>
       <PropertyRef Name="CustomerId" />
     </Key>
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
   </EntityType>
   <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
     <Key>
       <PropertyRef Name="OrderId" />
     </Key>
     <Property Name="OrderId" Type="int" Nullable="false"
               c:CustomAttribute="someValue"/>
     <Property Name="ProductId" Type="int" Nullable="false" />
     <Property Name="Quantity" Type="int" Nullable="false" />
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <c:CustomElement>
       Custom data here.
     </c:CustomElement>
   </EntityType>
   <Association Name="FK_CustomerOrders">
     <End Role="Customers"
          Type="ExampleModel.Store.Customers" Multiplicity="1">
       <OnDelete Action="Cascade" />
     </End>
     <End Role="Orders"
          Type="ExampleModel.Store.Orders" Multiplicity="*" />
     <ReferentialConstraint>
       <Principal Role="Customers">
         <PropertyRef Name="CustomerId" />
       </Principal>
       <Dependent Role="Orders">
         <PropertyRef Name="CustomerId" />
       </Dependent>
     </ReferentialConstraint>
   </Association>
   <Function Name="UpdateOrderQuantity"
             Aggregate="false"
             BuiltIn="false"
             NiladicFunction="false"
             IsComposable="false"
             ParameterTypeSemantics="AllowImplicitConversion"
             Schema="dbo">
     <Parameter Name="orderId" Type="int" Mode="In" />
     <Parameter Name="newQuantity" Type="int" Mode="In" />
   </Function>
   <Function Name="UpdateProductInOrder" IsComposable="false">
     <CommandText>
       UPDATE Orders
       SET ProductId = @productId
       WHERE OrderId = @orderId;
     </CommandText>
     <Parameter Name="productId"
                Mode="In"
                Type="int"/>
     <Parameter Name="orderId"
                Mode="In"
                Type="int"/>
   </Function>
 </Schema>

Atributos de anotación

Los atributos de anotación (Annotation) del lenguaje de definición de esquemas de almacenamiento (SSDL) son atributos XML personalizados del modelo de almacenamiento que proporcionan metadatos adicionales sobre los elementos del modelo de almacenamiento. Además de tener una estructura XML válida, las siguientes restricciones se aplican a los atributos de anotación:

  • Los atributos de anotación no deben estar en ningún espacio de nombres XML reservado para SSDL.
  • Dos atributos de anotación cualesquiera no pueden tener el mismo nombre completo.

Se pueden aplicar varios atributos de anotación a un elemento SSDL determinado. 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

El siguiente ejemplo muestra un elemento EntityType que tiene un atributo de anotación aplicado a la propiedad OrderId. El ejemplo también muestra un elemento de anotación añadido al elemento EntityType.

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Annotation (Elementos) (SSDL)

Los elementos Annotation del lenguaje de definición de esquemas de almacenamiento (SSDL) son elementos XML personalizados del modelo de almacenamiento que proporcionan metadatos adicionales sobre el modelo de almacenamiento. Además de tener una estructura XML válida, las siguientes restricciones se aplican a los elementos Annotation:

  • Los elementos Annotation no deben estar en un espacio de nombres de XML que esté reservado para SSDL.
  • 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 SSDL determinado.

Más de un elemento Annotation puede ser un elemento secundario de un elemento SSDL determinado. 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

El siguiente ejemplo muestra un elemento EntityType que tiene un elemento de anotación (CustomElement). El ejemplo también muestra un atributo de anotación aplicado a la propiedad OrderId.

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Facetas (SSDL)

Las facetas del lenguaje de definición de esquema de almacenamiento (SSDL) representan restricciones sobre los tipos de columna que se especifican en elementos Property. Las facetas se implementan como atributos XML en los elementos Property.

En la tabla siguiente se describen las facetas que se admiten en SSDL:

Faceta Descripción
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.
FixedLength Especifica si la longitud del valor de la columna puede variar.
MaxLength Especifica la longitud máxima del valor de la columna.
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, DateTimey DateTimeOffset, especifica el número de dígitos para la parte fraccionaria de segundos del valor de columna.
Escala Especifica el número de dígitos que puede haber a la derecha del separador de decimales para el valor de la columna.
Unicode Indica si el valor de la columna está almacenado como Unicode.