Compartir a través de


Propiedad extendida (CSDL)

En Entity Data Model (EDM), una propiedad extendida es aquella que se define y existe en el espacio de nombres de un usuario en lugar de en el espacio de nombres del sistema identificado por xmlns="https://schemas.microsoft.com/ado/2006/04/edm". El lenguaje de definición de esquemas conceptuales (CSDL) se utiliza para definir ambos tipos de propiedades. Para agregar una propiedad extendida a un esquema CSDL, defina un espacio de nombres y, a continuación, utilícelo en la definición de un tipo de entidad y su conjunto de entidades correspondiente.

En el ejemplo siguiente, se define un espacio de nombres xmlns:o1="http://other.contoso.com/schema". El prefijo del espacio de nombres, o1, actúa como alias en las definiciones del tipo de entidad AWBuildVersion y el conjunto de entidades AWBuildVersions.

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="AdventureWorksModel" Alias="Self" 
        xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
        xmlns:o1="http://other.contoso.com/schema">

  <EntityContainer Name="AdventureWorksEntities"
          o1:MyCustomAttribute="MyCustomAttributeValue">

    <EntitySet Name="AWBuildVersions"
          EntityType="Adventureworks.AWBuildVersion"
          o1:AnotherAttribute="AnotherAttributeValue"/>

  </EntityContainer>

…...

<EntityType Name="AWBuildVersion">
          <Key>
            <PropertyRef Name="SystemInformationID" />
          </Key>
          <Property Name="SystemInformationID"
                      Type="Byte" Nullable="false" />
          <Property Name="Database_Version" Type="String"
                      Nullable="false" />
          <Property Name="VersionDate" 
                      Type="DateTime" Nullable="false" />
          <Property Name="ModifiedDate"
                      Type="DateTime" Nullable="false" />
        </EntityType>

PropertyKind es una enumeración que se encuentra en los objetos MetadataProperty que se pueden utilizar para identificar las propiedades del sistema y las propiedades extendidas en el EDM. Para obtener un ejemplo utilizando esta enumeración en el código, vea Usar el modelo de objetos de AdventureWorks (EDM).

Ejecutar código que utiliza propiedades extendidas

Las modificaciones de esquema con propiedades extendidas se pueden probar utilizando el modelo de datos y código de la aplicación en Modelo completo (EDM) de AdventureWorks. Agregue las modificaciones al esquema de CSDL y vuelva a generar el modelo de objetos con Edmgen.exe tal y como se describe en el tema de AdventureWorks.

A continuación, agregue el código siguiente a la aplicación cliente en el tema Usar el modelo de objetos de AdventureWorks (EDM). Estos métodos se deben agregar a la clase Program y ser llamados desde el código en el comentario que hace referencia a la función DisplayProperties.

        public static void DisplayProperties(
        MetadataWorkspace workspace, DataSpace model)
        {
            // Get a collection of the entity containers.
            ReadOnlyCollection<EntityContainer> containers =
                workspace.GetItems<EntityContainer>(model);

            // Iterate through collection to get each entity container.
            foreach (EntityContainer container in containers)
            {
                // Display extended properties for the entity container.
                DisplayExtendedProperties(container);

                // Iterate through collection to get each entity set.
                foreach (EntitySetBase baseSet in container.BaseEntitySets)
                {
                    // Check if this instance is an EntitySet.
                    if (baseSet is EntitySet)
                    {
                        // Display extended properties for the entity set.
                        DisplayExtendedProperties(baseSet);
                    }
                }
            }

            // Get a collection of the entity types.
            ReadOnlyCollection<EntityType> entities =
                   workspace.GetItems<EntityType>(model);

            // Iterate through the collection to get each entity type.
            foreach (EntityType entity in entities)
            {
                // Display the extended properties for the entity type.
                DisplayExtendedProperties(entity);
            }
        }
        private static void DisplayExtendedProperties(MetadataItem item)
        {
            foreach (MetadataProperty property in item.MetadataProperties)
            {
                if (property.PropertyKind == PropertyKind.Extended)
                    Console.WriteLine(string.Format("\t{0}\t{1}\t{2}",
                      item.GetType().Name, property.Name, property.Value));
            }
        }

Vea también

Conceptos

Esquema conceptual completo de AdventureWorks (EDM)
Esquema de almacenamiento completo de AdventureWorks (EDM)
Esquema de asignación completo de AdventureWorks (EDM)
Usar el modelo de objetos de AdventureWorks (EDM)