Partager via


Propriété étendue (CSDL)

Dans le modèle EDM (Entity Data Model), une propriété étendue est une propriété qui est définie et qui existe dans l'espace de noms d'un utilisateur plutôt que dans l'espace de noms système identifié par xmlns="https://schemas.microsoft.com/ado/2006/04/edm". Le langage CSDL (Conceptual Schema Definition Language) est utilisé pour définir les deux types de propriétés. Pour ajouter une propriété étendue à un schéma CSDL, vous devez définir un espace de noms, puis l'utiliser dans la définition d'un type d'entité et de son jeu d'entités correspondant.

L'exemple suivant définit un espace de noms xmlns:o1="http://other.contoso.com/schema". Le préfixe de l'espace de noms o1 sert d'alias dans les définitions du type d'entité AWBuildVersion et du jeu d'entités 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>

La propriété PropertyKind est une énumération rencontrée sur les objets MetadataProperty qui peut être utilisée pour identifier les propriétés système et les propriétés étendues dans le modèle EDM. Pour obtenir un exemple utilisant cette énumération dans le code, voir Utilisation du modèle objet AdventureWorks (EDM).

Exécution de code utilisant des propriétés étendues

Les modifications de schéma par le biais de propriétés étendues peuvent être testées en utilisant le modèle de données et le code d'application dans Modèle complet AdventureWorks (EDM). Ajoutez les modifications au schéma csdl et régénérez le modèle d'objet avec Edmgen.exe comme décrit dans la rubrique AdventureWorks.

Ajoutez ensuite le code suivant à l'application cliente de la rubrique Utilisation du modèle objet AdventureWorks (EDM). Ces méthodes doivent être ajoutées à la classe Program et appelées à partir du code contenu dans le commentaire qui fait référence à la fonction 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));
            }
        }

Voir aussi

Concepts

Schéma conceptuel complet AdventureWorks (EDM)
Schéma de stockage complet AdventureWorks (EDM)
Schéma de mappage complet AdventureWorks (EDM)
Utilisation du modèle objet AdventureWorks (EDM)