Partager via


Spécification de mappage de HR Skills (Exemple d'application EDM)

À l'aide du modèle EDM (Modèle de données d'entité), la spécification de mappage de l'exemple d'application HR Skills décrit dans ces rubriques mappe les entités et les associations du schéma CSDL (Conceptual Schema Definition Language) aux métadonnées décrivant la base de données utilisée pour stocker des données pour l'application.

Pour plus d'informations sur le schéma conceptuel utilisé par cette application, voir Human Resources Skills WinApp (Exemple d'application EDM). Pour plus d'informations sur les métadonnées de stockage, voir Métadonnées de stockage de HR Skills (Exemple d'application EDM).

La syntaxe MSL (Mapping Specification Language) suivante mappe l'objet EntityContainer déclaré dans le schéma conceptuel HRSkills à la source de données dbo.

        <EntityContainerMapping CdmEntityContainer="HRSkills"
            StorageEntityContainer="dbo">

Les métadonnées de stockage nommées HRSkillsTarget contiennent un objet EntityContainer nommé qui doit correspondre au dbo d'un objet de base de données. Les conteneurs d'entités définis dans des schémas sont séparés et indépendants des schémas dans lesquels ils sont définis. Les noms assignés à CdmEntityContainer et StorageEntityContainer ne sont pas qualifiés par les noms des espaces de noms du schéma.

Chaque entité de cette implémentation est mappée à une table de la base de données. Les entités ont des propriétés et chaque propriété est mappée à une colonne d'une table. Les associations sont mappées entre les colonnes clés des tables qui représentent les entités.

Les entités sont mappées aux tables de base de données à l'aide de la syntaxe EntitySetMapping. Les associations sont mappées à l'aide de la syntaxe AssociationSetMapping. Pour plus d'informations sur EntitySetMapping et AssociationSetMapping, voir Schémas et spécification de mappage (Entity Framework).

La syntaxe EntitySetMapping suivante mappe l'entité Skills du schéma conceptuel à la table Skills de la base de données et mappe chaque propriété de l'entité Skills à une colonne de la base de données.

      <EntitySetMapping Name="Skills">
        <EntityTypeMapping
             TypeName="IsTypeOf(HRSkillsModel.Skills)">
          <MappingFragment StoreEntitySet="Skills">
            <ScalarProperty Name="SkillId" ColumnName="SkillId" />
            <ScalarProperty Name="SkillName" ColumnName="SkillName" />
            <ScalarProperty Name="BriefDescription"
                  ColumnName="BriefDescription" />
          </MappingFragment>
        </EntityTypeMapping>
      </EntitySetMapping>

La syntaxe AssociationSetMapping suivante définit le mappage de l'association entre les entités Skills et SkillInfo. Tout d'abord, un AssociationSetMapping identifie l'association définie entre les entités Skills et SkillInfo par son nom déclaré SkillInfo_Skill. Ensuite, la syntaxe identifie l'entité définie dans le fichier CSDL : edm:TypeName="SkillInfo_Skill". Un nom de table dans le schéma de métadonnées est ensuite corrélé au fichier CSDL par la syntaxe edm:TableName="SkillInfo">.

Les propriétés End de l'association spécifient les colonnes et les tables de la base de données qui sont corrélées aux entités et aux propriétés dans le schéma conceptuel. Par exemple, l'entité Skills utilise la colonne SkillId de la table Skills pour identifier l'instance d'entité à la terminaison (End) de l'association. La syntaxe inclut un ScalarProperty qui est corrélé à un ColumnName.

      <AssociationSetMapping Name="SkillInfo_Skill"
  TypeName="HRSkillsModel.SkillInfo_Skill" StoreEntitySet="SkillInfo">
        <EndProperty Name="Skills">
          <ScalarProperty Name="SkillId" ColumnName="SkillId" />
        </EndProperty>
        <EndProperty Name="SkillInfo">
          <ScalarProperty Name="SkillInfoId"
              ColumnName="SkillInfoId" />
        </EndProperty>
      </AssociationSetMapping>

Spécification de mappage

La syntaxe suivante illustre la spécification de mappage complète. La syntaxe d'une balise EntityContainerMapping spécifie à la fois un espace de noms et une classe : edm:CdmEntityContainer="HRSkillsModel.HRSkills". Celle-ci est mappée à un objet de base de données, dbo : edm:StorageEntityContainer="HRSkillsTarget.dbo".

L'EntityContainer est déclaré à la fois dans le schéma CSDL et dans le schéma SSDL. Le mappage corrèle les schémas, tandis que le processus de génération rend les entités stockées dans une base de données disponibles sous forme d'objets programmables.

<?xml version="1.0" encoding="utf-8"?>
      <Mapping Space="C-S" 
        xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
        <EntityContainerMapping StorageEntityContainer="dbo"
            CdmEntityContainer="HRSkills">
          <EntitySetMapping Name="Employees">
            <EntityTypeMapping TypeName="IsTypeOf(HRSkillsModel.Employees)">
              <MappingFragment StoreEntitySet="Employees">
                <ScalarProperty Name="EmployeeId"
                              ColumnName="EmployeeId" />
                <ScalarProperty Name="LastName" ColumnName="LastName" />
                <ScalarProperty Name="FirstName" ColumnName="FirstName" />
                <ScalarProperty Name="Alias" ColumnName="Alias" />
                <ScalarProperty Name="Email" ColumnName="Email" />
              </MappingFragment>
            </EntityTypeMapping>
          </EntitySetMapping>
          <EntitySetMapping Name="References">
            <EntityTypeMapping
                   TypeName="IsTypeOf(HRSkillsModel.References)">
              <MappingFragment StoreEntitySet="References">
                <ScalarProperty Name="ReferenceId"
                   ColumnName="ReferenceId" />
                <ScalarProperty Name="LastName" ColumnName="LastName" />
                <ScalarProperty Name="FirstName" ColumnName="FirstName" />
                <ScalarProperty Name="Position" ColumnName="Position" />
                <ScalarProperty Name="Alias" ColumnName="Alias" />
                <ScalarProperty Name="Email" ColumnName="Email" />
              </MappingFragment>
            </EntityTypeMapping>
          </EntitySetMapping>
          <EntitySetMapping Name="SkillInfo">
            <EntityTypeMapping
                  TypeName="IsTypeOf(HRSkillsModel.SkillInfo)">
              <MappingFragment StoreEntitySet="SkillInfo">
                <ScalarProperty Name="SkillInfoId"
                  ColumnName="SkillInfoId" />
                <ScalarProperty Name="URL" ColumnName="URL" />
              </MappingFragment>
            </EntityTypeMapping>
          </EntitySetMapping>
          <EntitySetMapping Name="Skills">
            <EntityTypeMapping
                 TypeName="IsTypeOf(HRSkillsModel.Skills)">
              <MappingFragment StoreEntitySet="Skills">
                <ScalarProperty Name="SkillId" ColumnName="SkillId" />
                <ScalarProperty Name="SkillName" ColumnName="SkillName" />
                <ScalarProperty Name="BriefDescription"
                      ColumnName="BriefDescription" />
              </MappingFragment>
            </EntityTypeMapping>
          </EntitySetMapping>
          <AssociationSetMapping Name="Reference_Employee"
                  TypeName="HRSkillsModel.Reference_Employee" StoreEntitySet="References">
            <EndProperty Name="Employees">
              <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
            </EndProperty>
            <EndProperty Name="References">
              <ScalarProperty Name="ReferenceId"
                      ColumnName="ReferenceId" />
            </EndProperty>
          </AssociationSetMapping>
          <AssociationSetMapping Name="Skill_Employee"
      TypeName="HRSkillsModel.Skill_Employee" StoreEntitySet="Skills">
            <EndProperty Name="Employees">
              <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
            </EndProperty>
            <EndProperty Name="Skills">
              <ScalarProperty Name="SkillId" ColumnName="SkillId" />
            </EndProperty>
          </AssociationSetMapping>
          <AssociationSetMapping Name="SkillInfo_Skill"
   TypeName="HRSkillsModel.SkillInfo_Skill" StoreEntitySet="SkillInfo">
            <EndProperty Name="Skills">
              <ScalarProperty Name="SkillId" ColumnName="SkillId" />
            </EndProperty>
            <EndProperty Name="SkillInfo">
              <ScalarProperty Name="SkillInfoId"
                  ColumnName="SkillInfoId" />
            </EndProperty>
          </AssociationSetMapping>
        </EntityContainerMapping>
      </Mapping>

Voir aussi

Concepts

Human Resources Skills WinApp (Exemple d'application EDM)
Métadonnées de stockage de HR Skills (Exemple d'application EDM)
Code de l'application HR Skills (Exemple d'application EDM)
Types de modèles EDM
Relations du modèle Entity Data Model