Поделиться через


Спецификация сопоставления HR Skills (образец приложения модели EDM)

Если используется модель Entity Data Model (модель EDM), то спецификация сопоставления для образца приложения HR Skills, описанного в этом ряде разделов, обеспечивает сопоставление сущностей и ассоциаций из схемы на языке CSDL с метаданными, описывающими базу данных, которая служит для хранения данных приложения.

Сведения о концептуальной схеме, которая используется в этом приложении, см. в разделе Приложение Human Resources Skills для Windows (образец приложения модели EDM). Дополнительные сведения о метаданных хранилища см. в разделе Метаданные хранилища HR Skills (образец приложения модели EDM).

Следующий синтаксис языка MSL обеспечивает сопоставление контейнера EntityContainer, объявленного в концептуальной схеме HRSkills, с источником данных dbo.

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

Метаданные хранилища с именем HRSkillsTarget содержат контейнер с именем EntityContainer, позволяя определить соответствие с объектом базы данных dbo. Контейнеры сущностей, определенные в схемах, являются отдельными и независимыми от схем, в которых они определены, а имена, присвоенные контейнерам CdmEntityContainer и StorageEntityContainer, не уточняются именами пространств имен схемы.

Каждая сущность в этой реализации сопоставляется с таблицей базы данных. Сущности имеют свойства, и каждое свойство сопоставляется со столбцом таблицы. Ассоциации сопоставляются между ключевыми столбцами в таблицах, представляющих сущности.

Сущности сопоставляются с таблицами базы данных на основе синтаксиса EntitySetMapping. Ассоциации сопоставляются с применением синтаксиса AssociationSetMapping. Дополнительные сведения о сопоставлениях EntitySetMapping и AssociationSetMapping см. в разделе Спецификация схем и сопоставлений (платформа Entity Framework).

В следующем синтаксисе EntitySetMapping сопоставляется сущность Skills из концептуальной схемы с таблицей Skills в базе данных, а каждое свойство сущности Skills сопоставляется со столбцом в базе данных.

      <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 определяет сопоставление ассоциации между сущностями Skills и SkillInfo . Прежде всего, в сопоставлении AssociationSetMapping идентифицируется ассоциация, определенная между сущностями Skills и SkillInfo, по ее объявленному имени SkillInfo_Skill. Затем в этом синтаксисе обеспечивается идентификация сущности, определенной в CSDL-файле: edm:TypeName="SkillInfo_Skill". После этого имя таблицы в схеме метаданных соотносится с CSDL-файлом с помощью синтаксиса edm:TableName="SkillInfo">.

Свойства элемента End ассоциации определяют и столбцы, и содержащие их таблицы базы данных, которые соотносятся с сущностями и свойствами в концептуальной схеме. Например, в сущности Skills используется столбец SkillId таблицы Skills для идентификации экземпляра сущности в элементе End ассоциации. Синтаксис включает свойство ScalarProperty, соотнесенное со столбцом 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>

Спецификация сопоставления

В следующем синтаксисе показана полная спецификация сопоставления. Синтаксис тега EntityContainerMapping задает и пространство имен, и класс: edm:CdmEntityContainer="HRSkillsModel.HRSkills". Тем самым выполняется сопоставление с объектом базы данных dbo: edm:StorageEntityContainer="HRSkillsTarget.dbo".

Сущность EntityContainer объявлена в обеих схемах — CSDL и SSDL. Сопоставление позволяет связать между собой схемы, а процесс построения обеспечивает доступ к сущностям, хранящимся в базе данных, как к программируемым объектам.

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

См. также

Основные понятия

Приложение Human Resources Skills для Windows (образец приложения модели EDM)
Метаданные хранилища HR Skills (образец приложения модели EDM)
Код приложения HR Skills (образец приложения модели EDM)
Типы модели EDM
Связи в модели EDM